

//
//
//

//-----------------------------------------------------
//fonctions utilitaires 
//-----------------------------------------------------


Date.prototype.EgalA = function(date) {
	return ((this.getFullYear() == date.getFullYear()) &&
		(this.getMonth() == date.getMonth()) &&
		(this.getDate() == date.getDate()));
};

Date.prototype.Precede = function(date) {
	var src = (this.getFullYear()*10000)+(this.getMonth()*100)+this.getDate();
	var dst = (date.getFullYear()*10000)+(date.getMonth()*100)+date.getDate();
	return (src < dst);
};


Date.prototype.Incr = function(nbj) {
	return new Date(this.getFullYear(),this.getMonth(),this.getDate()+nbj);
};

var OsUtil = {
	FormateNum :function (num,taille)
	{
		var str = new String(num);
		if(str.length >= taille) return str;
		var z=""; for(var i=0;i<taille-str.length;i++) {z+="0";}
		return z+str;
	},
	EstDateValideN : function (jour,mois,an) 
	{
		if (isNaN(jour) || isNaN(mois) || isNaN(an)) return false;
		if(mois<1 || mois>12) return false;
		var EstBissextile = (an%4 == 0) && (an%100 != 0 || an%400 == 0);
		var JoursMois = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31);
		var nbjour = JoursMois[mois-1];
		if (mois == 2 && EstBissextile) nbjour++;
		if (jour<1 || jour>nbjour) return false;
		return true;
	},
	ChEnEntier: function(ch)
	{
		if(ch==null) return 0;
		return parseInt(ch.replace(/^0/g,""));
	}
};

//-----------------------------------------------------
// Fin fonctions utilitaires 
// -----------------------------------------------------


jQuery.fn.delay = function(time,func){
	this.each(function(){
		setTimeout(func,time);
	});
	
	return this;
};

jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

function OsGadget() 
{
};

var OsScriptOk=new Array();

OsGadget.prototype = {
	Domaine:"http://gadget.open-system.fr/",
	//Domaine:"http://louis-dev/france/vrai/cluster/gadget/",
	DomaineJson : "http://jsonp.open-system.fr/",
	//DomaineJson:"http://louis-dev/france/vrai/cluster/gadget/",
	CptD: 0,
	FSel: '</select>',
	SvCk : null,
	Data :null,
	SelectOngletCallback: null,
	AfficheCallback : null,
	LocalisationCallback : null,
	PostCallback :null,
	OptionAffichage : null,
	DonneCss : function(style,type)
	{
		if(style=="") return "";
		return (/\.css$/.test(style) ? style: (this.Domaine+type+style+".css")).toLowerCase();
	},
	ChargeCss : function(url)
	{
		if(url=="") return;
		var h = jQuery("head");
		var ach = true;
		jQuery("link",h).each(function (i) {
			if(jQuery(this).attr("href").toLowerCase() == url) ach = false;
		});
		if(ach) 
		{
			h.prepend('<link rel="stylesheet" type="text/css" />');
			jQuery("link:first",h).attr("href",url); // Pour IE, il faut lui affecter le href
		}
		
	},
	Init : function(conf) 
	{
		this.CptD = new Date().getTime();
		this.Conf = conf;
		var base = this;
		if(conf.SvCk != null) this.SvCk = conf.SvCk;
		else this.SvCk = new Array();
		var urlc = this.Domaine+"oscalendar/lang/calendar-"+conf.Langue+"-utf8.js";
		var tabjs = [this.DonneCss(this.Conf.Style,"style/std/"),this.DonneCss(this.Conf.StyleCal,"oscalendar/"),this.Domaine+"jquery-ui-1.7.1.tabs.min.js",this.Domaine+"oscalendar/calendar.js",urlc,this.Domaine+"oscalendar/calendar-setup_stripped.js",this.Domaine+"jquery.mousewheel.min.js",this.Domaine+"jquery.scrollable-1.0.2.min.js"];
		base.InclusJs(tabjs,function () {
			base.ChargeJson();
		});
		
	},
	InclusJs : function(tab,fctfinale,index)
	{
		var base = this;
		var idx = index || 0;
		if(idx==tab.length) fctfinale();
		else if(tab[idx]=="") base.InclusJs(tab,fctfinale,idx+1);
		else if(OsScriptOk[tab[idx]] !=undefined) 
		{
			if(OsScriptOk[tab[idx]]==1) 
			{
				jQuery(this).delay(20,function() {
					base.InclusJs(tab,fctfinale,idx);
				});	
			}
			else base.InclusJs(tab,fctfinale,idx+1);
		}
		else 
		{
			OsScriptOk[tab[idx]] = 1;
			if(/\.css$/.test(tab[idx])) 
			{
				base.ChargeCss(tab[idx]);
				OsScriptOk[tab[idx]] = 2;
				base.InclusJs(tab,fctfinale,idx+1);
			}
			else jQuery.ajax({url:tab[idx],dataType:"script",cache:true, success:function () 
			{
				OsScriptOk[tab[idx]] = 2;
				base.InclusJs(tab,fctfinale,idx+1);
			}});
		}
	},
	ChargePrestJson : function(infotab,index,data)
	{
		var base = this;
		if(index==infotab.length) 
		{
			
			base.Affiche(data);
		}
		else 
		{
			jQuery.ajax({url:base.DomaineJson+infotab[index].Url, dataType:"jsonp", success:function(proprio) 
			{
				infotab[index].Moteur[infotab[index].Nom]=proprio;
				base.ChargePrestJson(infotab,index+1,data);
			}});
		}
	},
	ChargeJson : function()
	{
		var base = this;
		var infotab = new Array();
		jQuery.ajax({url:base.DomaineJson+base.Conf.DonneJSONP(), dataType:"jsonp", success:function(data) 
		{
			
			base.AffecteCriteres(data);
			var i,j;
			for(i=0;i<data.Onglet.length;i++) 
			{	
				for(j=0;j<data.Onglet[i].Moteur.length;j++) 
				{
					var moteur = data.Onglet[i].Moteur[j];
					if(moteur.InclusMonoFournisseur!=undefined && base.EstMonoFournisseur(moteur))
					{
						var urljs = "jsonp.aspx?px="+moteur.InclusMonoFournisseur.Px+"&page="+moteur.InclusMonoFournisseur.Page+"&Param/IdFournisseur="+base.DonneListeIdFournisseur(moteur);
						infotab.push({Url:urljs,Nom:moteur.InclusMonoFournisseur.Nom,Moteur:moteur});
					}
					var criturl = base.DonneCrit(moteur,"urldestination");
					if(criturl != null) infotab.push({Url:"jsonp.aspx?px="+escape(criturl.Url),Nom:"DataUrlDest",Moteur:moteur});
				}
				
			}
			base.ChargePrestJson(infotab,0,data);
			
		}});
	},
	AffecteCriteres:function(data)
	{
		var base=this;
		this.Data = data;
		jQuery.each(this.Conf.ListeCritere,function(idx,item) {
			var moteur = base.DonneMoteur(item.IdMoteur);
			
			base.Insere(moteur.Critere,item,item.Ordre);
		});
	},
	EstOngletInactif:function(num)
	{
		var tab = this.Conf.OngInv;
		for(var i=0;i<tab.length;i++) 
		{
			if(num==tab[i]) return true;
		}
		return false;
	},
	EstModeOnglet:function()
	{
		if(this.OptionAffichage==null || this.OptionAffichage.Navigation==undefined || this.OptionAffichage.Navigation != "accordeon") return true;
		return false;
	},
	GenereBarreOnglet:function(data)
	{
		var i;
		var conf = this.Conf;
		var conglet ="<ul>";
		for(i=0;i<data.Onglet.length;i++) 
		{	
			if(this.EstOngletInactif(i)) continue;
			conglet += '<li><a href="#'+conf.ObjId+'_OsOnglet'+i+'" id="OsA_'+conf.ObjId+'_OsOnglet'+i+'"><span id="OsO'+i+'">'+data.Onglet[i].Nom+'</span></a></li>';
			data.Onglet[i].Idx = i;
		}
		conglet += "</ul>";
		for(i=0;i<data.Onglet.length;i++) 
		{	
			if(this.EstOngletInactif(i)) continue;
			conglet += '<div id="'+conf.ObjId+'_OsOnglet'+i+'"><div class="OsContHaut"></div><div class="OsCont" id="OsContBarre'+i+'"></div><div class="OsContBas"></div></div>';
		}
		return conglet;
	},
	GenereAccordeon:function(data)
	{
		var i;
		var conf = this.Conf;
		var conglet ="";
		for(i=0;i<data.Onglet.length;i++) 
		{
			if(this.EstOngletInactif(i)) continue;
			conglet += '<div class="accordion-entete" id="OsA_'+conf.ObjId+'_OsOnglet'+i+'"><span class="ui-icon-fleche"></span><a href="javascript:;" id="OsLAccA_'+conf.ObjId+'_OsOnglet'+i+'"><span id="OsO'+i+'">'+data.Onglet[i].Nom+'</span></a></div>';
			data.Onglet[i].Idx = i;
			conglet += '<div id="'+conf.ObjId+'_OsOnglet'+i+'" class="accordion-contenu"><div class="OsContHaut"></div><div class="OsCont" id="OsContBarre'+i+'"></div><div class="OsContBas"></div></div>';
		}		
		return conglet;
	},
	ChangeSectionAcc:function(idx,el)
	{
		jQuery('.accordion-contenu',el).hide();
		jQuery('.accordion-contenu:eq(' + idx + ')',el).show();
		jQuery('.accordion-entete',el).removeClass('accordion-section-encours');
		jQuery('.accordion-entete:eq(' + idx + ')',el).addClass('accordion-section-encours');
	},
	Affiche:function(data)
	{
		
		var base = this;
		var conf = this.Conf;
		jQuery('#'+conf.ObjId).html('<div id="Os'+data.Id+'"></div>');
		var doc=jQuery('#Os'+data.Id,jQuery('#'+conf.ObjId));
		var i;
		var estonglet = this.EstModeOnglet();
		var code_onglet = estonglet ? this.GenereBarreOnglet(data):this.GenereAccordeon(data);
		var term = (jQuery.browser.msie && jQuery.browser.version=="6.0") ? ".gif":".png";
		var cs_accord = estonglet ? '':'class="OsAccordion"';
		doc.html('<div id="OsBarreOnglet" '+cs_accord+'>'+code_onglet+'<div class="OsLogoOs"><a href="http://www.alliance-reseaux.com" target="_blank" title="Alliance Réseaux - © Open System"><img src="http://gadget.open-system.fr/img/mini-open-system'+term+'" border="0" alt="Alliance Réseaux - © Open System"/></a></div></div>');
		
		
		for(i=0;i<data.Onglet.length;i++) 
		{
			if(this.EstOngletInactif(i)) continue;
			base.GenereMoteurs(jQuery("#OsContBarre"+i,doc),data.Onglet[i]);
		}
		var sel_onglet = base.GetPref("Barre");
		var seldef = (sel_onglet=="") ? 0:sel_onglet;
		var cpto = 0;
		while(cpto<data.Onglet.length && this.EstOngletInactif(seldef))
		{
			seldef--;cpto++;
			if(seldef<1) seldef = data.Onglet.length-1;
		}
		var barre = jQuery('#OsBarreOnglet',doc);
		if(estonglet) 
		{
			
			barre.tabs({
				selected : seldef,
				select: function(event, ui) {
					if(base.Data.Onglet[ui.index].Moteur[0].Metier != 6) base.SetPref("Barre",ui.index);
					if(base.SelectOngletCallback!=null) base.SelectOngletCallback(event,ui);
				}
			});
		}
		else 
		{
			base.ChangeSectionAcc(seldef,barre);
			jQuery(".accordion-entete",barre).click(function(event) {
				var idx = jQuery(this).prevAll('.accordion-entete').length;
				if(base.Data.Onglet[idx].Moteur[0].Metier != 6) base.SetPref("Barre",idx);
				base.ChangeSectionAcc(idx,barre);
				if(base.SelectOngletCallback!=null) base.SelectOngletCallback(event,idx);
			}).mouseover( function() {
				jQuery(this).toggleClass('accordion-section-hover');
			}).mouseout( function() {
				jQuery(this).toggleClass('accordion-section-hover'); 
			});
		}
		if(base.AfficheCallback!=null) base.AfficheCallback();
		this.AffecteOptionAffichage();
		if(data.Id=='25297-845')
		  mise_en_forme(1)
		else
		  mise_en_forme(0);
	},
	AffecteOptionAffichage : function()
	{
		if(this.OptionAffichage==null) return;
		var doc=jQuery('#Os'+this.Data.Id,jQuery('#'+this.Conf.ObjId));
		var barre = jQuery("#OsBarreOnglet",doc);
		if(this.OptionAffichage.Largeur != undefined) barre.css({"width":this.OptionAffichage.Largeur});
		if(this.OptionAffichage.Hauteur != undefined) barre.css({"height":this.OptionAffichage.Hauteur});
		var boolmasque = (this.OptionAffichage.MasqueOnglet == undefined) ? 0:this.OptionAffichage.MasqueOnglet;
		if(boolmasque) jQuery(".ui-tabs-nav",barre).hide();
		if(this.OptionAffichage.CouleurFond != undefined) barre.css({"background-color":this.OptionAffichage.CouleurFond});
	},
	DonneMoteur: function(mId)
	{
		for(var i=0;i<this.Data.Onglet.length;i++) 
		{	
			var onglet = this.Data.Onglet[i];
			for(var j=0;j<onglet.Moteur.length;j++) 
			{
				if(onglet.Moteur[j].Id ==mId) return onglet.Moteur[j];
			}
		}
		return null;
	},
	DonneOngletDepuisMoteur : function(mId)
	{
		for(var i=0;i<this.Data.Onglet.length;i++) 
		{	
			var onglet = this.Data.Onglet[i];
			for(var j=0;j<onglet.Moteur.length;j++) 
			{
				if(onglet.Moteur[j].Id ==mId) return {"Onglet":onglet,"Num":i};
			}
		}
		return null;
	},
	DonneNumOngletDepuisMoteur : function(mId)
	{
		var iong = this.DonneOngletDepuisMoteur(mId);
		if(iong==null) return 0;
		return iong.Num;
	},
	GetBarre : function()
	{
		return jQuery("#OsBarreOnglet",jQuery("#Os"+this.Data.Id,jQuery('#'+this.Conf.ObjId)));
	},
	SetOngletCourant : function(num)
	{
		var barre = this.GetBarre();
		if(this.EstModeOnglet()) barre.tabs("select",num);
		else this.ChangeSectionAcc(num,barre);
		this.SetPref("Barre",num);
	},
	Demolette : function(id)
	{
		var conf = this.Conf;
		var data = this.Data;
		var el = jQuery('#Os'+data.Id,jQuery('#'+conf.ObjId));
		jQuery("#OsListeLien_"+id,el).unbind("mousewheel.scrollable");
	},
	SetMoteurCourant : function(id)
	{
		var conf = this.Conf;
		var data = this.Data;
		var iong = this.DonneOngletDepuisMoteur(id);
		if(iong==null) return;
		var ong = iong.Onglet;
		this.SetOngletCourant(iong.Num);
		if(ong.Moteur.length>1) 
		{
			var el = jQuery('#Os'+data.Id,jQuery('#'+conf.ObjId));
			var lst = jQuery("#OsSelChoixMoteur"+ong.Id,el);
			jQuery("option",lst).each(function () {
                var opt = jQuery(this);
				if(opt.val() == id) opt.get(0).selected = true;
				else opt.get(0).selected = false;
            });
			this.MasqueToutMoteur(el,ong);
			this.AfficheMoteur(el,id);
			this.SetPref("OsSelChoixMoteur"+ong.Id,id);
		}
	},
	GetMoteurCourant : function()
	{
		var nong = this.GetOngletCourant();
		var ong = this.Data.Onglet[nong];
		if(ong.Moteur.length>1) 
		{
			var pref = this.GetPref("OsSelChoixMoteur"+ong.Id);
			if(pref=="") return ong.Moteur[0].Id;
			else return parseInt(pref);
		}
		return ong.Moteur[0].Id;
	},
	GetOngletCourant : function()
	{
		var sel_onglet = this.GetPref("Barre");
		return (sel_onglet=="") ? 0:parseInt(sel_onglet);
	},
	DonneSvCk:function(nom) 
	{
		jQuery.each(this.SvCk,function(idx,obj) {
			if(obj.val==nom) return obj;
		});
		var obj = {"nom":nom,"val":""};
		this.SvCk.push(obj);
		return obj;
	},
	GetDomCk : function()
	{
		if(this.Conf.DomaineCookie == null) return {"expires":2,"path":"/"};
		return {"domain":this.Conf.DomaineCookie,"expires":2,"path":"/"};
	},
	SetPref: function(nom,val) 
	{
		var nn = this.Conf.ObjId+"_"+nom;
		jQuery.cookie(nn,val,this.GetDomCk());
		this.DonneSvCk(nn).val = val;
	},
	GetPref: function(nom)
	{
		var nn = this.Conf.ObjId+"_"+nom;
		var val = jQuery.cookie(nn);
		if(val==null) return this.DonneSvCk(nn).val;
		return val;
	},
	DelPref : function(nom)
	{
		var nn = this.Conf.ObjId+"_"+nom;
		jQuery.cookie(nn,null,this.GetDomCk());
		var swap = new Array();
		jQuery.each(this.SvCk,function(idx,obj) {
			if(obj.val!=nn) swap.push(obj);
		});
		this.SvCk = swap;
	},
	EstJourDansTabJ : function(tab,jdate)
	{
		if(tab==null || tab.length==undefined) return false;
		for(var i=0;i<tab.length;i++) 
		{
			if(jdate == tab[i].Id) return true;
		}
		return false;
	},
	DonneDateDebut : function(crit) 
	{
		if(!this.Conf.AutoDate) return this.Conf.DateDebut;
		var mini = this.Conf.DateDebut.Incr(crit.Delai);
		if(crit.Type == "dateliste") return mini;
		var tabj = null;
		if(crit.ModeJS==undefined || crit.ModeJS==0) tabj = [{"Id":6}];
		else if(crit.ModeJS==2) tabj = crit.Jours;
		if(crit.ModeJS!=1 && tabj!= null && tabj.length!=0) 
		{
			var sec = 0;
			var ormini = new Date(mini);
			while(!this.EstJourDansTabJ(tabj,mini.getDay())) 
			{
				if(sec>8) return ormini; // uniquement pour protéger d'une boucle infinie.
				mini = mini.Incr(1);
				sec++;
			}
		}
		return mini;
	},
	DonneDateDepuisSel : function(el,mId)
	{
		return new Date(parseInt(jQuery("#OsAnDebut"+mId,el).val()),OsUtil.ChEnEntier(jQuery("#OsMoisDebut"+mId,el).val())-1,OsUtil.ChEnEntier(jQuery("#OsJourDebut"+mId,el).val()));
	},
	SurChangeDateSel : function(el,mId)
	{
		var strdate = this.DonneDateDepuisSel(el,mId).print("%d/%m/%Y");
		jQuery("#"+this.Conf.ObjId+"_caldatedeb"+mId,el).get(0).value =strdate;
		this.SetPref("OsDateDebut"+mId,strdate);
	},
	SelectionneDateDebut : function(el,mId,date)
	{
		jQuery("#OsJourDebut"+mId,el).get(0).selectedIndex = date.getDate()-1;
		jQuery("#OsMoisDebut"+mId,el).get(0).selectedIndex = date.getMonth();
		var objan = jQuery("#OsAnDebut"+mId,el).get(0);
		for(var i =0;i<objan.options.length;i++) 
		{
			if(parseInt(objan.options[i].value)==date.getFullYear())  
			{
				objan.options[i].selected = true;break;
			}
		}
		this.SetPref("OsDateDebut"+mId,date.print("%d/%m/%Y"));
	},
	GenereSelDateSimple : function (el,mId,crit)
	{
		var base = this;
		var datedebut = this.DonneDateDebut(crit);
		var datepref = this.GetPref("OsDateDebut"+mId);
		if(datepref!="") datedebut = Date.parseDate(datepref,"%d/%m/%Y");
		var estsel = 'selected="selected"';
		this.AjouteHidden(el,base.Conf.ObjId+"_caldatedeb"+mId,"",base.Conf.ObjId+"_caldatedeb"+mId);
		var i,mot = '<span class="OsImgDateDebut"><img src="'+this.Domaine+'img/shim.gif" id="'+base.Conf.ObjId+'_calimgdeb'+mId+'" align="absmiddle" style="cursor: pointer;" border="0"/></span>';
		mot += '<select name="Globales/JourDebut" class="OsJourDebut" id="OsJourDebut'+mId+'">';
		for(i=1;i<=31;i++) {mot +=	'<option '+((i==datedebut.getDate()) ? estsel:'')+' value="'+OsUtil.FormateNum(i,2)+'">'+i+'</option>';}
		mot += this.FSel;
		mot += '<select name="Globales/MoisDebut" class="OsMoisDebut" id="OsMoisDebut'+mId+'">';//
		for(i=0;i<12;i++) {mot +=	'<option '+((i==datedebut.getMonth()) ? estsel:'')+' value="'+OsUtil.FormateNum(i+1,2)+'">'+Calendar._MN[i]+'</option>';}
		mot += this.FSel;
		mot += '<select name="Globales/AnDebut" class="OsAnDebut" id="OsAnDebut'+mId+'">';
		var anref = new Date().getFullYear();
		for(i=anref;i<anref+5;i++) {mot +=	'<option '+((i==datedebut.getFullYear()) ? estsel:'')+' value="'+i+'">'+i+'</option>';}
		mot += this.FSel;
		el.append(mot);
		jQuery("#"+base.Conf.ObjId+"_caldatedeb"+mId,el).get(0).value = datedebut.print("%d/%m/%Y");
		jQuery("#OsJourDebut"+mId,el).change(function() {base.SurChangeDateSel(el,mId);});
		jQuery("#OsMoisDebut"+mId,el).change(function() {base.SurChangeDateSel(el,mId);});
		jQuery("#OsAnDebut"+mId,el).change(function() {base.SurChangeDateSel(el,mId);});
		var ccal = (base.OptionAffichage==null || base.OptionAffichage.ClassCalendar == undefined) ? null:base.OptionAffichage.ClassCalendar;
		Calendar.setup({
			inputField     :    (base.Conf.ObjId+"_caldatedeb"+mId),
			button 	       :    (base.Conf.ObjId+"_calimgdeb"+mId),
			ifFormat    : "%d/%m/%Y", 
			align          :    "Br",
			singleClick    :    true,
			classcal : ccal,
			onUpdate       :   function(cal)
			{
				base.SelectionneDateDebut(el,mId,cal.date);
			}
		 });	
		 
	},
	DonneOptionDate : function(date,crit)
	{
		var opts = "";
		var dd = date;
		for(var i=0;i<7;i++) 
		{
			if(this.EstJourDansTabJ(crit.Jours,dd.getDay())) opts += '<option value="'+dd.print("%d/%m/%Y")+'">'+dd.print(crit.Format)+'</option>';
			dd = dd.Incr(1); 
		}
		return opts;
	},
	GenereListeDate : function (el,mId,crit)
	{
		var base = this;
		var datedebut = this.DonneDateDebut(crit);
		var opts = "";
		for(var i=0;i<crit.NbSem;i++) 
		{
			opts += this.DonneOptionDate(datedebut,crit);
			datedebut = datedebut.Incr(7);
		}
		el.append('<select name="OsDateDebut_'+mId+'" class="OsDateDebut" id="OsDateDebut'+mId+'">'+opts+this.FSel);
		var datepref = this.GetPref("OsDateDebut"+mId);
		var strdatedebut = datedebut.print("%d/%m/%Y");
		if(datepref=="") datepref = strdatedebut;
		var sel = jQuery("#OsDateDebut"+mId,el);
		sel.val(datepref);
		if(sel.get(0).selectedIndex==-1) sel.get(0).selectedIndex=0;
		datepref = sel.val();
		if(datepref==null) return;
		this.AjouteHidden(el,"Globales/JourDebut",datepref.split("/")[0],"OsJourDebut"+mId);
		this.AjouteHidden(el,"Globales/MoisDebut",datepref.split("/")[1],"OsMoisDebut"+mId);
		this.AjouteHidden(el,"Globales/AnDebut",datepref.split("/")[2],"OsAnDebut"+mId);
		this.SetPref("OsDateDebut"+mId,datepref);
		sel.change(function() {
			var dd = jQuery(this).val();
			var td = dd.split("/");
			jQuery("#OsJourDebut"+mId,el).val(td[0]);
			jQuery("#OsMoisDebut"+mId,el).val(td[1]);
			jQuery("#OsAnDebut"+mId,el).val(td[2]);
			base.SetPref("OsDateDebut"+mId,dd);
		});
	},
	ValideDebut : function(elform,mId,moteur)
	{
		if(!OsUtil.EstDateValideN(OsUtil.ChEnEntier(jQuery("#OsJourDebut"+mId,elform).val()),OsUtil.ChEnEntier(jQuery("#OsMoisDebut"+mId,elform).val()),parseInt(jQuery("#OsAnDebut"+mId,elform).val()))) 
		{
			alert(moteur.DateValideAlerte);
			return false;
		}
		var crit = this.DonneCrit(moteur,"date");
		if(crit==null) return true;
		var datesel = this.DonneDateDepuisSel(elform,mId).Incr(-crit.Delai);
		if(datesel.Precede(new Date())) 
		{
			alert(moteur.DateDelaiAlerte);
			return false;
		}
		return true;
	},
	ValideHotel : function(elform,mId,moteur)
	{
		var i,j,nbad = jQuery("#OsNbAdultes"+mId,elform).get(0).selectedIndex;
		var nbenf = jQuery("#OsNbEnfants"+mId,elform).get(0).selectedIndex;
		var total = nbad+nbenf;
		var crit = this.DonneCrit(moteur,"nbpers");
		if(total==0) 
		{
			alert(moteur.NbPersAlerte);
			return false;
		}
		var typehebe = "";
		for(i=0;i<crit.Corresp.length;i++) 
		{
			var obj = crit.Corresp[i];
			if(total>=obj.NbMin && total<=obj.NbMax) 
			{
				typehebe = obj.TypeHebe;
				break;
			}
		}
		jQuery("#OsListeIdTypeHebe_"+mId,elform).get(0).value = typehebe;
		var xml = "<XmlAges>";
		for(i=0;i<nbenf;i++) 
		{
			xml+="<XmlAgeEnfant>"+jQuery('#OsAgeEnfant_'+mId+'_'+i,elform).get(0).value+"</XmlAgeEnfant>";
		}
		xml += "</XmlAges>";
		jQuery("#OsXmlAges_"+mId,elform).get(0).value = xml;
		return true;
	},
	ValideTypeHebeCheck : function(elform,mId,moteur)
	{
		var crit = this.DonneCrit(moteur,"typehebecheck");
		if(crit==null || crit.Mode==1) return true;
		var ok = false;
		for(var i=0;i<crit.ListeId.length;i++) 
		{
			var nom = "OsListeIdTypeHebe"+mId+"_"+i;
			if(jQuery("#"+nom,elform).get(0).checked) 
			{
				ok=true;break;
			}
		}
		if(!ok) alert(moteur.TypeHebeCheckAlerte);
		return ok;
	},
	GenereBtnRech : function(el,elform,mId,crit,moteur)
	{
		var base = this;
		var classe = crit.Mode ? "OsBtnEnvoiImg" : "OsBtnEnvoi";
		var contenu = crit.Mode ? ('<img src="'+crit.Bouton+'" border="0" width="'+crit.Largeur+'" height="'+crit.Hauteur+'"/>') : crit.Bouton;
		el.append('<a id="OsBtnEnvoi'+mId+'" href="javascript:;" class="'+classe+'">'+contenu+'</a>');
		jQuery("#OsBtnEnvoi"+mId,el).click(function() 
		{
			if(moteur.Metier<5) // Hébergement
			{
				var typesejour= 2;
				var elradio = jQuery("#OsRadioDuree"+mId+"_0",elform).get(0);
				if(elradio==null || !elradio.checked) elradio = jQuery("#OsRadioDuree"+mId+"_1",elform).get(0);
				if(elradio!=null && elradio.checked) typesejour =  elradio.value;
				jQuery("#OsParamDureeSejour"+mId,elform).get(0).value = (typesejour=="1") ? (7* jQuery("#OsDureeSemaine"+mId,elform).get(0).value):jQuery("#OsDureeNuit"+mId,elform).get(0).value;
			}
			else if((moteur.Metier==5 && moteur.ModeFiltrageCourse!=0) || moteur.Metier==8) // Activités  et resto
			{
				jQuery("#OsActiDateDebut"+mId,elform).get(0).value = base.DonneDateDepuisSel(elform,mId).print("%d/%m/%Y");
			}
			var  ret = false;
			switch(moteur.Metier) 
			{
				case 1:
				case 8:
					ret = base.ValideDebut(elform,mId,moteur);break;
				case 2:
					ret = base.ValideDebut(elform,mId,moteur) && base.ValideHotel(elform,mId,moteur); break;
				case 3:
				case 4:
					ret = base.ValideDebut(elform,mId,moteur) && base.ValideTypeHebeCheck(elform,mId,moteur); break;
				case 5:
					ret = (moteur.ModeFiltrageCourse==0) ? true : base.ValideDebut(elform,mId,moteur);break;
			}
			if(ret) 
			{
				var dest = base.DonneCrit(moteur,"urldestination");
				base.PosteMoteur(mId,moteur,elform, (dest==null) ? null: jQuery("#OsListeDestination"+mId,elform).val());
			}
			return false;
		});
	},
	DonneTarget : function(moteur) 
	{
		var target = null;
		if(moteur.Target!="") target = moteur.Target;
		if(this.Conf.TargetDef != null) target = this.Conf.TargetDef;
		if(this.Conf.TargetMoteur!=null && this.Conf.TargetMoteur[moteur.Id]!=null) target = this.Conf.TargetMoteur[moteur.Id];
		return target;
	},
	PosteMoteur: function(mId,moteur,elform,url,meth)
	{
		var t = this;
		var methode = meth || "post";
		var msgatt =jQuery("#"+t.Conf.ObjId+"_OsContAttente"+mId);
		msgatt.show();
		var lf = elform.get(0);
		if(url!=undefined && url!=null) 
		{
			lf.action = url;
		}
		var target = t.DonneTarget(moteur);
		var action = lf.action;
		if(target!=null) 
		{
			if(target=="_blank") lf.action = t.TraiteUrlWebKit(lf.action); // correction bogue webkit
			lf.target=target;
		}
		lf.method = methode;
		var ok = true;
		if(t.PostCallback!=null) ok = t.PostCallback(mId,lf.action,meth,msgatt,moteur);
		if(ok!==false) lf.submit();
		else msgatt.hide();
		lf.action = action; // correction bogue webkit
	},	
	AjouteHidden:function(el,nom,valeur,id)
	{
		el.append('<input type="hidden" name="'+nom+'" '+((id==null) ? '':'id="'+id+'"')+' value="'+valeur+'" />'); 
	},
	ActiveBlocDuree: function(el,mId,num)
	{
		jQuery("#OsBlocSel"+mId+"_"+num,el).fadeIn("slow");jQuery("#OsBlocSel"+mId+"_"+(num ? 0:1),el).fadeOut("slow");
		this.SetPref("OsBlocSel"+mId,num);
	},
	EstDureeChecked : function(mId,crit,mode,type,ordre)
	{
		var numr = this.GetPref("OsBlocSel"+mId);
		var checked = false;
		if(numr=="") 
		{
			if(crit.Mode==mode || (crit.Mode==1 && ordre==0)) checked = true;
		}
		else 
		{
			if(crit.Mode==1 && numr==type) checked = true;
		}
		return checked;
	},
	GenereDureeSemaine : function(el,mId,crit,ordre)
	{
		var mot ='<li class="OsCritDuree_sem"><span><input type="radio" id="OsRadioDuree'+mId+'_0" class="OsRadioDuree" name="Globales/TypeSejour" value="1" '+ (this.EstDureeChecked(mId,crit,2,0,ordre) ? 'checked="cheched"':'')+'/>'+crit.PrefixeSem+"</span>";
		mot+='<span class="OsCritBlocSelSem" id="OsBlocSel'+mId+'_0">';
		mot += '<select name="Globales/DureeSemaine" class="OsDureeSemaine" id="OsDureeSemaine'+mId+'">';
		var deb = (crit.MiniSem==undefined || crit.MiniSem < 1) ? 1:crit.MiniSem;
		for(var i=deb;i<=crit.MaxiSem;i++) 
		{
			mot +=	'<option '+((i==1) ? 'selected="selected"':'')+' value="'+i+'">'+i+' '+((i==1)? crit.SingulierSem : crit.PlurielSem)+'</option>';
		}
		mot += this.FSel;
		mot+='</span>';
		mot+='</li>';
		return mot;
	},
	GenereDureeNuit : function(el,mId,crit,ordre)
	{
		var mot = '<li class="OsCritDuree_jour" ><span><input type="radio" id="OsRadioDuree'+mId+'_1" class="OsRadioDuree" name="Globales/TypeSejour" value="2" '+(this.EstDureeChecked(mId,crit,3,1,ordre) ? 'checked="cheched"':'')+'/>'+crit.PrefixeJour+"</span>";
		mot+='<span class="OsCritBlocSelJour" id="OsBlocSel'+mId+'_1">';
		mot += '<select name="Globales/DureeNuit" class="OsDureeNuit" id="OsDureeNuit'+mId+'">';
		var deb = (crit.MiniJour==undefined || crit.MiniJour < 1) ? 1:crit.MiniJour;
		for(var i=deb;i<=crit.MaxiJour;i++) 
		{
			mot +=	'<option '+((i==1) ? 'selected="selected"':'')+' value="'+i+'">'+i+' '+((i==1)? crit.SingulierJour:crit.PlurielJour)+'</option>';
		}
		mot += this.FSel;
		mot+='</span>';
		mot+='</li>';
		return mot;
	},
	GenereListeDestination :function(el,mId,crit,moteur)
	{
		var style = (crit.Visible != undefined && !crit.Visible) ? " style=\"display:none\" ":"";
		var mot = '<div class="OsCrit_'+crit.Type+'" '+style+' id="OsCrit_'+crit.Type+'_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_'+crit.Type+'">';
		mot += '<select class="OsListeDestination" id="OsListeDestination'+mId+'">';
		for(var i=0;i<moteur.DataUrlDest.Destinations.ListeUrl.length;i++) 
		{
			var listeurl = moteur.DataUrlDest.Destinations.ListeUrl[i];
			mot += '<option value="'+this.Lg(listeurl.Url)+'">'+this.Lg(listeurl.Titre)+'</option>';
		}
		mot += this.FSel+'</div><div class="OsCritS">'+crit.Suffixe+'</div></div>';
		el.append(mot);
		this.ActiveListePref(el,mId,"OsListeDestination"+mId);
	},
	GenereDureeHebe : function (el,mId,crit)
	{
		var base = this;
		var i,mot='<ul>';
		if(crit.Mode==1) 
		{
			if(crit.OrdreAff==1) 
			{
				mot += this.GenereDureeNuit(el,mId,crit,0);
				mot += this.GenereDureeSemaine(el,mId,crit,1);
			}
			else 
			{
				mot += this.GenereDureeSemaine(el,mId,crit,0);
				mot += this.GenereDureeNuit(el,mId,crit,1);
			}
		}
		else if(crit.Mode==2) mot += this.GenereDureeSemaine(el,mId,crit,0);
		else mot += this.GenereDureeNuit(el,mId,crit,0);
		mot+='</ul>';
		el.append(mot);
		if(crit.Mode==1) 
		{
			var pref = this.GetPref("OsBlocSel"+mId);
			if(pref=="") jQuery("#OsBlocSel"+mId+"_"+((crit.OrdreAff==0) ? 1:0),el).hide();
			else if(pref==1) jQuery("#OsBlocSel"+mId+"_0",el).hide();
			else jQuery("#OsBlocSel"+mId+"_1",el).hide();
			jQuery("#OsRadioDuree"+mId+"_0",el).click(function() {base.ActiveBlocDuree(el,mId,0);});
			jQuery("#OsRadioDuree"+mId+"_1",el).click(function() {base.ActiveBlocDuree(el,mId,1);});
		}
		else if(crit.Mode==2) jQuery("#OsRadioDuree"+mId+"_0",el).hide();
		else jQuery("#OsRadioDuree"+mId+"_1",el).hide();
		
		if(crit.Mode!=3) this.ActiveListePref(el,mId,"OsDureeSemaine"+mId);
		if(crit.Mode!=2) this.ActiveListePref(el,mId,"OsDureeNuit"+mId);
	},
	ActiveListePref: function(el,mId,nom,callback) 
	{
		var base = this;
		var sel = jQuery("#"+nom,el);
		var val = this.GetPref(nom);
		
		if(val!="") 
		{
			var idx = parseInt(val);
			if(!isNaN(idx)) 
			{
				if(sel.get(0).selectedIndex!=idx) 
				{
					sel.get(0).selectedIndex =idx;
					if(jQuery.isFunction(callback)) callback(mId,idx);
				}
			}
		}
		sel.change(function() {
			base.SetPref(nom,sel.get(0).selectedIndex);
			if(jQuery.isFunction(callback)) callback(mId,sel.get(0).selectedIndex);
		});
	},
	GenereTypeHebeCheck:function(el,mId,crit)
	{
		var base = this;
		if(crit.Mode==1) this.AjouteHidden(el,"Globales/ListeIdTypeHebe",crit.ListeId[0].Id);
		else 
		{
			var mot = '<div class="OsCrit_'+crit.Type+'" id="OsCrit_'+crit.Type+'_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_'+crit.Type+'"><ul>';
			for(var i=0;i<crit.ListeId.length;i++) 
			{
				var nom = "OsListeIdTypeHebe"+mId+"_"+i;
				var pref = this.GetPref(nom);
				if(pref=="") pref=0;
				mot += '<li><input name="Globales/ListeIdTypeHebe" class="OsListeIdTypeHebeCheck" id="'+nom+'" '+((pref==0) ? '':'checked="checked"' )+' type="checkbox" value="'+crit.ListeId[i].Id+'">'+crit.ListeId[i].Nom+'</li>';
			}
			mot += '</ul></div><div class="OsCritS">'+crit.Suffixe+'</div></div>';
			el.append(mot);
			for(var i=0;i<crit.ListeId.length;i++) 
			{
				var nom = "OsListeIdTypeHebe"+mId+"_"+i;
				jQuery("#"+nom,el).click(function(event) {
					if(event.target.checked) base.SetPref(event.target.id,1);
					else base.SetPref(event.target.id,0);
				});
			}
		}
	},
	DonneListeLieuGlobal:function(id)
	{
		var dest = this.Data.Destination;
		for(var i=0;i<dest.length;i++) 
		{
			if(dest[i].Id==id) return dest[i].ListeId;
		}
		return null;
	},
	GenereInput:function(el,mId,crit)
	{
		var id = crit.Nom.replace(/\//g,"_");
		var style = (crit.Visible != undefined && !crit.Visible) ? " style=\"display:none\" ":"";
		var mot = '<div class="OsCrit_'+crit.Type+'" '+style+'id="OsCrit_'+id+'_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_'+id+'">';
		mot += '<input name="'+crit.Nom+'" class="Os'+crit.Type+'" id="Os'+id+mId+'" type="text"/>';
		mot += '</div><div class="OsCritS">'+crit.Suffixe+'</div></div>';
		el.append(mot);
	},
	GenereListe:function(el,mId,crit,nomglobale,typevar,callback)
	{
		var prefvar = (typevar == undefined || typevar ==0) ? "Globales/" : "Param/";
		var listeid = (crit.ModeGestionLieu == undefined) ? crit.ListeId : this.DonneListeLieuGlobal(crit.Id);
		if(crit.Mode==1) 
		{
			if(crit.Type!="fourn") this.AjouteHidden(el,prefvar+nomglobale,listeid[0].Id);
		}
		else 
		{
			var style = (crit.Visible != undefined && !crit.Visible) ? " style=\"display:none\" ":"";
			var mot = '<div class="OsCrit_'+crit.Type+'" '+style+'id="OsCrit_'+crit.Type+'_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_'+crit.Type+'">';
			mot += '<select name="'+prefvar+nomglobale+'" class="Os'+nomglobale+'" id="Os'+nomglobale+mId+'">';
			for(var i=0;i<listeid.length;i++) 
			{
				mot += '<option value="'+listeid[i].Id+'">'+listeid[i].Nom+'</option>';
			}
			mot += this.FSel+'</div><div class="OsCritS">'+crit.Suffixe+'</div></div>';
			el.append(mot);
			this.ActiveListePref(el,mId,"Os"+nomglobale+mId,callback);
		}	
	},
	DonneOptionPers: function(index,typepers,crit)
	{
		if(index==0) return crit.Aucun;
		if(index==1) return "1 "+crit[typepers+"S"];
		return ""+index+" "+crit[typepers+"P"];
	},
	CreeSelectAge : function(el,mId,crit,num)
	{
		var base = this;
		var nomel = 'OsAgeEnfant_'+mId+'_'+num;
		var ageenf = this.GetPref(nomel);
		if(ageenf=="") ageenf = 1;
		var sel = '<select class="OsSelAgeEnfant" id="'+nomel+'">';
		for(var i=1;i<=15;i++) 
		{
			sel+='<option value="'+i+'" '+((i==ageenf) ? 'selected="selected"':'')+'>'+i+' '+((i==1) ? crit.AnS : crit.AnP)+'</option>';
		}
		sel+=this.FSel;
		el.append(sel);
		jQuery("#"+nomel,el).change(function(event) {base.SetPref(nomel,event.target.value);});
	},
	GenereListeEnfant : function(el,mId,crit,nb)
	{
		el.html("");
		if(nb==0) return;
		for(var i =0;i<nb;i++) this.CreeSelectAge(el,mId,crit,i);
	},
	GenereNbPers:function(el,mId,crit)
	{
		var base = this;
		var prefad = this.GetPref("OsNbAdultes"+mId);
		if(prefad=="") prefad = "2";
		var prefenf = this.GetPref("OsNbEnfants"+mId);
		if(prefenf=="") prefenf = "0";
		var mot = '<div class="OsCrit_'+crit.Type+'Ad" id="OsCrit_'+crit.Type+'Ad_'+mId+'"><div class="OsCritP">'+crit.AdultePrefixe+'</div><div class="OsCritCont" id="OsCritCont_Ad'+crit.Type+'">';		
		mot += '<select name="Globales/NbAdultes" class="OsNbAdultes" id="OsNbAdultes'+mId+'">';
		for(var i=0;i<7;i++) 
		{
			mot += '<option value="'+i+'" '+((i==prefad) ? 'selected="selected"':'')+'>'+this.DonneOptionPers(i,"Adulte",crit)+'</option>';
		}
		mot += this.FSel+'</div></div>';
		mot += '<div class="OsCrit_'+crit.Type+'Enf" id="OsCrit_'+crit.Type+'Enf_'+mId+'"><div class="OsCritP">'+crit.EnfantPrefixe+'</div><div class="OsCritCont" id="OsCritCont_Enf'+crit.Type+'">';		
		mot += '<select class="OsNbEnfants" id="OsNbEnfants'+mId+'">';
		for(var i=0;i<5;i++) 
		{
			mot += '<option value="'+i+'" '+((i==prefenf) ? 'selected="selected"':'')+'>'+this.DonneOptionPers(i,"Enfant",crit)+'</option>';
		}
		mot += this.FSel+'</div><div class="OsAgesEnfant" id="OsCritAgesEnfant'+mId+'"></div></div>';
		el.append(mot);
		jQuery("#OsNbAdultes"+mId,el).change(function(event) {base.SetPref("OsNbAdultes"+mId,event.target.selectedIndex);});
		jQuery("#OsNbEnfants"+mId,el).change(function(event) {
			var nb = event.target.selectedIndex;
			base.SetPref("OsNbEnfants"+mId,nb);
			base.GenereListeEnfant(jQuery("#OsCritAgesEnfant"+mId,el),mId,crit,nb);
		});
		this.GenereListeEnfant(jQuery("#OsCritAgesEnfant"+mId,el),mId,crit,prefenf);
		this.AjouteHidden(el,"Globales/ListeIdTypeHebe","","OsListeIdTypeHebe_"+mId);
		this.AjouteHidden(el,"Globales/XmlAges","","OsXmlAges_"+mId);
	},
	PlaceCaract:function(el,mId,crit,nomglobale)
	{
		var caract = "";
		for(var i =0;i<crit.ListeId.length;i++) 
		{
			if(jQuery("#Os"+crit.Type+"Check"+mId+"_"+i,el).get(0).checked) 
			{
				if(caract!="") caract+="#";
				caract += crit.ListeId[i].Id;
				this.SetPref("Os"+crit.Type+"Check"+mId+"_"+i,1);
			}
			else this.DelPref("Os"+crit.Type+"Check"+mId+"_"+i);
		}
		if(caract=="") caract="*";
		jQuery("#Os"+nomglobale+mId,el).get(0).value = caract;
	},
	GenereCaract:function(el,mId,crit,nomglobale,typevar)
	{
		var base = this;
		var conf = this.Conf;
		var prefvar = (typevar == undefined || typevar ==0) ? "Globales/" : "Param/";
		this.AjouteHidden(el,prefvar+nomglobale,(crit.Mode==1) ? crit.ListeId[0].Id:"","Os"+nomglobale+mId);
		if(crit.Mode!=1) 
		{
			el.append('<div class="OsCrit_'+crit.Type+'" id="OsCrit_'+crit.Type+'_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_'+crit.Type+'"><ul></ul></div></div>');
			var cont = jQuery("ul",jQuery('#'+conf.ObjId+' #OsCrit_'+crit.Type+'_'+mId+' .OsCritCont'));
			for(var i =0;i<crit.ListeId.length;i++) 
			{
				cont.append('<li class="Os_Crit_'+crit.Type+'_Check" id="OsCrit'+crit.Type+'Check'+mId+'_'+i+'"><input type="checkbox" id="Os'+crit.Type+'Check'+mId+'_'+i+'"/>'+crit.ListeId[i].Nom+'</li>');
				var check = jQuery("#Os"+crit.Type+"Check"+mId+"_"+i,cont);
				if(crit.ListeId[i].Visible) 
				{
					check.get(0).checked = (this.GetPref("Os"+crit.Type+"Check"+mId+"_"+i) == 1);
					check.click(function() {
						base.PlaceCaract(el,mId,crit,nomglobale);
					});
					
				}
				else 
				{
					check.get(0).checked=true;
					jQuery('#'+conf.ObjId+' #OsCrit'+crit.Type+'Check'+mId+'_'+i).hide();
				}
				
			}
			this.PlaceCaract(el,mId,crit,nomglobale);
		}
		
	},
	GenereCritere :function(el,mId,crit,moteur)
	{
		var conf = this.Conf;
		var style = (crit.Visible != undefined && !crit.Visible) ? " style=\"display:none\" ":"";
		switch(crit.Type)
		{
			case "date":
				el.append('<div class="OsCrit_date" '+style+' id="OsCrit_date_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_date"></div><div class="OsCritS">'+crit.Suffixe+'</div></div>');
				this.GenereSelDateSimple(jQuery('#'+conf.ObjId+' #OsCrit_date_'+mId+' .OsCritCont'),mId,crit);
				return;	
			case "dateliste":
				el.append('<div class="OsCrit_date" '+style+' id="OsCrit_date_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_date"></div><div class="OsCritS">'+crit.Suffixe+'</div></div>');
				this.GenereListeDate(jQuery('#'+conf.ObjId+' #OsCrit_date_'+mId+' .OsCritCont'),mId,crit);
				return;
			case "duree":
				el.append('<div class="OsCrit_duree" '+style+' id="OsCrit_duree_'+mId+'"><div class="OsCritP">'+crit.Prefixe+'</div><div class="OsCritCont" id="OsCritCont_duree"></div></div>');	
				this.GenereDureeHebe(jQuery('#'+conf.ObjId+' #OsCrit_duree_'+mId+' .OsCritCont'),mId,crit);
				return;
			case "lieu":
				this.GenereListe(el,mId,crit,"ListeIdCommune",0,this.LocalisationCallback);
				return;
			case "insee":
				this.GenereListe(el,mId,crit,"ListeInsee",0,this.LocalisationCallback);
				return;
			case "typehebe":
				this.GenereListe(el,mId,crit,"ListeIdTypeHebe");
				return;
			case "typecourse":
				this.GenereListe(el,mId,crit,"TypeCourse");
				return;
			case "typehebecheck":	
				this.GenereTypeHebeCheck(el,mId,crit);
				return;
			case "classement":
				this.GenereListe(el,mId,crit,"ListeIdClassement");
				return;
			case "capacite":
				this.GenereListe(el,mId,crit,"Capacite");
				return;
			case "capachhote":
				this.GenereListe(el,mId,crit,"CapaciteHotel");
				return;	
			case "dureeacti":
				this.GenereListe(el,mId,crit,"DureeActiMinMax",1);
				return;	
			case "periode":
				this.GenereListe(el,mId,crit,"DureeRech");
				return;
			case "caract":
				this.GenereCaract(el,mId,crit,"ListeIdCaract");
				return;
			case "restocarac":
				this.GenereCaract(el,mId,crit,"ListeIdCaract",1);
				return;	
			case "restolabel":
				this.GenereCaract(el,mId,crit,"ListeIdLabel",1);
				return;	
			case "fourn":
				if(this.Conf.ListeIdFournDef == null && this.Conf.ListeIdFournMoteur[mId]==null) this.GenereListe(el,mId,crit,"ListeIdFournisseur");
				return;
			case "nbpers":
				this.GenereNbPers(el,mId,crit);
				return;
			case "urldestination":
				this.GenereListeDestination(el,mId,crit,moteur);
				return;
			case "chambre":
				this.GenereListe(el,mId,crit,"ListeIdChambre",1);
				return;
			case "restoservice":
				this.GenereListe(el,mId,crit,"ListeIdService",1);
				return;	
			case "restocapa":
				this.GenereListe(el,mId,crit,"NbPers",1);
				return;	
			case "restoprix":
				this.GenereListe(el,mId,crit,"PrixMenu",1);
				return;	
			case "cuisine":
				this.GenereListe(el,mId,crit,"ListeIdCuisine",1);
				return;	
			case "externe":
				this.GenereListe(el,mId,crit,crit.NomVar,crit.TypeVar);
				return;
			case "input":
				this.GenereInput(el,mId,crit);
				return;
			case "btnrech":
				el.append('<div class="OsCrit_btnrech" id="OsCrit_btnrech_'+mId+'"><div class="OsCritCont" id="OsCritCont_btnrech"></div></div>');			
				this.GenereBtnRech(jQuery('#'+conf.ObjId+' #OsCrit_btnrech_'+mId+' .OsCritCont'),el,mId,crit,moteur);
				return;
		}
		
	},
	CreeFlash : function(el,src,largeur,hauteur)
	{
		var txt = '';
		if(jQuery.browser.msie)
		{
			txt+='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="'+largeur+'" height="'+hauteur+'">';
			txt += '<param name="movie" value="'+src+'"/>';
			txt += '<param name="quality" value="high" />';
			txt += '<param name="wmode" value="transparent" />';
		}
		txt += '<embed src="'+src+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="'+largeur+'" height="'+hauteur+'" wmode="transparent"></embed>';
		if(jQuery.browser.msie) txt += '</object>';
		el.append(txt);
	},
	GenereMsgRecherche : function(moteur)
	{
		if(!moteur.MsgRecherche.Actif) return;
		var attenteid = this.Conf.ObjId+'_OsContAttente'+moteur.Id;
		var msgid = 'OsMsgAttente'+moteur.Id;
		if(!jQuery("#"+msgid).length) jQuery("body").append('<div id="'+attenteid+'"></div>');		
		jQuery("#"+attenteid).css({top:0,left:0,textAlign:'center',position: 'absolute', width: '100%', height: '100%'}).html('<div class="OsContAttenteFond"></div><div id="'+msgid+'" class="OsAttente"></div>');
		var elrech = jQuery("#"+msgid,jQuery("#"+attenteid));
		if(moteur.MsgRecherche.Mode==1) this.CreeFlash(elrech,moteur.MsgRecherche.Msg,moteur.MsgRecherche.Largeur,moteur.MsgRecherche.Hauteur); // en flash
		else elrech.css({width:moteur.MsgRecherche.Largeur,height:moteur.MsgRecherche.Hauteur}).append(moteur.MsgRecherche.Msg);
		jQuery("#"+attenteid).hide();
	},
	DonneCrit : function(moteur, type)
	{
		for(var i=0;i<moteur.Critere.length;i++) if(moteur.Critere[i].Type==type) return moteur.Critere[i];
		return null;
	},
	DonneListeIdFournisseur : function(moteur)
	{
		var listeidfourn = "";
		var codeos = this.DonneCodeOs(moteur);
		if(codeos.Type!="") listeidfourn = codeos.IdFournisseur;
		else if(this.Conf.ListeIdFournDef != null) listeidfourn = this.Conf.ListeIdFournDef;
		else if(this.Conf.ListeIdFournMoteur[moteur.Id]!=null) listeidfourn = this.Conf.ListeIdFournMoteur[moteur.Id];
		else 
		{
			var crit = this.DonneCrit(moteur,"fourn");
			if(crit!=null && crit.Mode==1) listeidfourn = crit.ListeId[0].Id;
		}
		return listeidfourn;
	},
	DonneCodeOs : function(moteur)
	{
		var codeos = "";
		if(this.Conf.CodeOsDef != null) codeos = this.Conf.CodeOsDef;
		else if(this.Conf.CodeOsMoteur[moteur.Id]!=null) codeos = this.Conf.CodeOsMoteur[moteur.Id];
		var tab = /^(CF|CP|CC)*\-*(OSMB|MARK|GPIM|HELI|HRES|ITEAG|WRESM|OSCA|CVERT|UNIC|OSHO|HRIT|OSCH|ITEAC|OACTI|OPTR|OPBI|OPBP|OPBO|OPLM|OPPA|OPRE){1}\-{1}([0-9]+)\-*(.*)/.exec(codeos);
		var ret = {"Type":"","NumEtape":2,"IdFournisseur":0,"Code":""};
		if(tab==null || tab.length < 5) return ret;
		ret.IdFournisseur = tab[3];
		ret.Code = codeos;
		if(/OSMB|MARK|GPIM|HELI|HRES|ITEAG|WRESM/.test(tab[2])) 
		{
			ret.Type = "mb"; // meublé
			if(tab[4]!="") ret.NumEtape =3;
		}
		else ret.Type="hebe"; // indifférent
		return ret;
	},
	DonneAlias : function(moteur)
	{
		var alias = "";
		if(moteur.Alias != undefined) alias = moteur.Alias;
		if(this.Conf.AliasDef != null) alias = this.Conf.AliasDef;
		if(this.Conf.AliasMoteur[moteur.Id] != null) alias = this.Conf.AliasMoteur[moteur.Id];
		return alias;
	},
	EstMonoFournisseur : function(moteur)
	{
		var listeidfourn = this.DonneListeIdFournisseur(moteur);
		return (moteur.TypeRech==2 || moteur.TypeRech==4) && (listeidfourn!="") && !(/,/g.test(listeidfourn));
	},
	GenereLien : function(elform,el,moteur,lien)
	{
		var base = this;
		var img = (lien.Img!='') ? '<div class="OsLienDivImg"><img src="'+this.DomaineJson+'dynimg/'+lien.Img+'" border="0"/></div>':'<div class="OsLienImgBlank">&nbsp;</div>';
		var target = this.DonneTarget(moteur);
		var ltarget =  (target!=null) ? (' target="'+target+'"'):"";
		el.append('<div class="OsLienItem" id="OsLien_'+lien.Id+'">'+img+'<h3 class="OsLienTitre">'+lien.Titre+'</h3><p class="OsLienResume">'+lien.Txt+'</p><div class="OsDivLienBtn"><a class="OsLienBtn" id="OsLienBtn_'+lien.Id+'" href="'+lien.Url+'"'+ltarget+'>'+lien.Btn+'</a></div></div>'); 
		jQuery("#OsLienBtn_"+lien.Id,el).click(function() {
			var msgatt = jQuery("#"+base.Conf.ObjId+"_OsContAttente"+moteur.Id);
			msgatt.show();
			var ok = true;
			if(base.PostCallback!=null) ok = base.PostCallback(moteur.Id,lien.Url,"get",msgatt,moteur);
			if(ok===false) 
			{
				msgatt.hide();
				return false;
			}
		});
		
	},
	GenereLiens : function(elform,el,moteur)
	{
		var cont = '<div id="OsBlocLiens_'+moteur.Id+'" class="OsBlocLiens"><a id="OsPrev_'+moteur.Id+'" class="OsLienPrev"><img src="'+this.Domaine+'img/shim.gif" border="0"/></a><a id="OsNext_'+moteur.Id+'" class="OsLienNext"><img src="'+this.Domaine+'img/shim.gif" border="0"/></a><div id="OsListeLien_'+moteur.Id+'" class="OsListeLien"><div id="OsColLien_'+moteur.Id+'" class="OsListeLienCol">'; 
		cont+= '</div></div></div>';
		el.append(cont);
		for(var i=0;i<moteur.ListeLien.length;i++) 
		{
			this.GenereLien(elform,jQuery('#OsColLien_'+moteur.Id,el),moteur,moteur.ListeLien[i]);
		}
		jQuery("#OsListeLien_"+moteur.Id,el).scrollable({vertical:false,  size: 1, items:".OsListeLienCol", next:("#OsNext_"+moteur.Id), prev:("#OsPrev_"+moteur.Id)});
	},
	GenereVarMoteur : function(elform,moteur)
	{
		var base = this;
		var col = this.Conf.VarMoteur[moteur.Id];
		if(col!=null) {
			jQuery.each(col,function(idx,item) {
				base.AjouteHidden(elform,item.Nom,item.Val);
			});
		}
	},
	Insere:function(tab,element,index)
	{
		if(index>=tab.length) 
		{
			tab.push(element);
			return tab;
		}	
		else if(index==0) 
		{
			tab.unshift(element);
			return tab;
		}
		else 
		{
			var newtab = tab.slice(0,index);
			newtab.push(element);
			newtab.concat(tab.slice(index,tab.length-1));
			return newtab;
		}
	},
	DonneCriteres : function(moteur)
	{
		if(this.Conf.ListeChoix==null || this.Conf.ListeChoix[moteur.Id] == null) return moteur.Critere;
		this.Conf.ListeChoix[moteur.Id].sort(function(a,b) {
			return (a.Ordre < b.Ordre) ? -1:((a.Ordre > b.Ordre) ? 1:0);
		});
		var crits = new Array();
		crits = crits.concat(moteur.Critere);
		jQuery.each(this.Conf.ListeChoix[moteur.Id], function(idx,item) {
			item.Type = "externe";
			item.Mode = 2;
			var tabn = item.Nom.split('/');
			item.TypeVar = (tabn[0]=="Globales") ? 0 : 1;
			item.NomVar = tabn[1];
			if(item.Ordre < crits.length) 
			{
				var newcrit = crits.slice(0,item.Ordre);
				newcrit.push(item);
				newcrit = newcrit.concat(crits.slice(item.Ordre,item.Ordre+crits.length));
				crits = newcrit;		
			}
			else crits.push(item);
		});
		return crits;
	},
	TraiteUrlWebKit: function(url) // uniquement pour traiter un bogue webkit
	{
		if(jQuery.browser.safari) 
		{
			if(/\?/g.test(url)) return url+"&"+this.CptD++;
			return url+"?"+this.CptD++;
		}
		return url;
	},
	GenereHiddenGet : function(el,url) {
		var hid = "";
		var tab= url.split(/\?/);
		if(tab.length<2) return;
		var params = tab[1].split("&");
		if(params.length<1) return;
		for(var i=0;i<params.length;i++) 
		{
			var cont = params[i].split("=");
			if(cont.length<2) continue;
			hid+='<input type="hidden" name="'+cont[0]+'" value="'+cont[1]+'"/>';
		}
		el.html(hid);
	},
	GenereMoteur : function(el,moteur,onglet)
	{
		var base = this;
		var listeidfourn = this.DonneListeIdFournisseur(moteur);
		var codeos = this.DonneCodeOs(moteur);
		var numetape = 2;
		
		var alias = this.DonneAlias(moteur);
		var codealias = (alias=="") ? "": ("_"+alias+"_a");
		if(moteur.MonoProprio!=undefined && moteur.MonoProprio.Proprio!=undefined) numetape=moteur.MonoProprio.Proprio.NumEtapeP;
		var intro = (moteur.Metier==6) ? "":('<div class="OsIntro">'+moteur.Intro+'</div>');
		var urldest = "";
		if (moteur.Metier<=5 || moteur.Metier==8) 
		{
			var domaine = moteur.Domaine;
			if(this.Conf.DomaineDef != null) domaine = this.Conf.DomaineDef;
			if(this.Conf.DomaineMoteur!=null && this.Conf.DomaineMoteur[moteur.Id]!=null) domaine = this.Conf.DomaineMoteur[moteur.Id];
			urldest = "http://"+domaine+"/z"+moteur.IdZoneRech+codealias+"_"+this.Conf.Langue+"-.aspx";
		}
		el.append(intro+'<form name="OsMot'+moteur.Id+'" id="OsMot'+moteur.Id+'" method="post" action="'+urldest+'"></form>');	
		if(moteur.Metier==6) 
		{
			var target = base.DonneTarget(moteur);		
			var ltarget = (target==null) ? '' : (' target="'+target+'"');
			el.append('<form name="OsMottr'+moteur.Id+'" id="OsMotHid'+moteur.Id+'" method="get" action="'+moteur.UrlDirect.replace(/\?.*/,"")+'"'+ltarget+'></form>');
			this.GenereHiddenGet(jQuery("#OsMotHid"+moteur.Id,el),moteur.UrlDirect);
		}
		this.GenereMsgRecherche(moteur);
		var elform = jQuery("#OsMot"+moteur.Id,el);
		this.GenereVarMoteur(elform,moteur);
		if(moteur.Metier==1 && codeos.Type=="mb") 
		{   // Pour les meublés si on a un codeos de type produit alors on le transmet à l'étape 3
			numetape= codeos.NumEtape;
			if(numetape==3) this.AjouteHidden(elform,"Param/CodeOs",codeos.Code); 
		}
		if(moteur.Metier==6) 
		{
			
			var ll = this.EstModeOnglet() ? "":"LAcc";
			var nomong = 'Os'+ll+'A_'+this.Conf.ObjId+'_OsOnglet'+onglet.Idx;
			var ong = jQuery('#'+nomong);
			ong.click(function() {
				var msgatt = jQuery("#"+base.Conf.ObjId+"_OsContAttente"+moteur.Id);
				msgatt.show();
				var oks = true;
				if(base.PostCallback!=null) oks = base.PostCallback(moteur.Id,moteur.UrlDirect,"get",msgatt,moteur);
				if(oks!==false) jQuery("#OsMotHid"+moteur.Id,el).submit();
				else msgatt.hide();
			});			
			return;
		}
		if(moteur.Metier==7) {
			this.GenereLiens(elform,el,moteur);
			return;
		}
		this.AjouteHidden(elform,"NumEtape",numetape); 
		this.AjouteHidden(elform,"Param/DureeSejour","0","OsParamDureeSejour"+moteur.Id);
		var crits = this.DonneCriteres(moteur);
		for(var i=0;i<crits.length;i++) 
		{
			this.GenereCritere(elform,moteur.Id,crits[i],moteur);
		}
		if(listeidfourn!="") this.AjouteHidden(elform,"Globales/ListeIdFournisseur",listeidfourn);
		if(moteur.Metier == 1) this.AjouteHidden(elform,"Globales/NDep",0); // meublés 
		else if(moteur.Metier==2 || moteur.Metier==3 || moteur.Metier ==4) // hôtels - campings - ch-hotes
		{
			this.AjouteHidden(elform,"Globales/NDepCh",0); 
			if(numetape>2 && moteur.MonoProprio != undefined)
			{
				this.AjouteHidden(elform,"Param/IdProprio",moteur.MonoProprio.Proprio.IdProprio); 
				this.AjouteHidden(elform,"Param/TypeRecherche",1); 
				if(moteur.Metier==2) this.AjouteHidden(elform,"Param/ListeIdProprioRESERVIT",moteur.MonoProprio.Proprio.IdProprio); 
			}
		}	
		else if(moteur.Metier==5) 
		{
			this.AjouteHidden(elform,"Globales/NDep",0);
			this.AjouteHidden(elform,"Param/ModeFiltrage",moteur.ModeFiltrageCourse);
			this.AjouteHidden(elform,"Globales/DateDeb","","OsActiDateDebut"+moteur.Id);
		}
		else if(moteur.Metier==8)  // resto
		{
			this.AjouteHidden(elform,"Param/DateRech","","OsActiDateDebut"+moteur.Id);
		}
	},
	MasqueToutMoteur: function(el,onglet)
	{
		for(var i=0;i<onglet.Moteur.length;i++) 
		{
			jQuery("#OsMoteur"+onglet.Moteur[i].Id,el).hide();
		}
	},
	AfficheMoteur:function(el,id) {jQuery("#OsMoteur"+id,el).show();},
	GenereChoixMoteur : function (el,onglet)
	{
		var base = this;
		var pref = this.GetPref("OsSelChoixMoteur"+onglet.Id);
		var i,sel = '<div class="OsChoixMoteur"><div class="OsIntro">'+onglet.Intro+'</div><select id="OsSelChoixMoteur'+onglet.Id+'" name="OsSelChoixMoteur'+onglet.Id+'">';
		for(i=0;i<onglet.Moteur.length;i++) 
		{
			sel += '<option value="'+onglet.Moteur[i].Id+'" '+((pref==onglet.Moteur[i].Id) ? 'selected="selected"':'' )+' >'+onglet.Moteur[i].Nom+'</option>';
		}
		sel += '</select></div>';
		el.append(sel);
		jQuery("#OsSelChoixMoteur"+onglet.Id,el).change(function(obj) 
		{
			base.MasqueToutMoteur(el,onglet);
			var idaff = obj.target.options[obj.target.selectedIndex].value;
			base.AfficheMoteur(el,idaff);
			base.SetPref("OsSelChoixMoteur"+onglet.Id,idaff);
		});
		
	},
	GenereMoteurs : function (el,onglet)
	{
		if(onglet.Moteur.length >1 && onglet.Moteur[0].Metier!=6) this.GenereChoixMoteur(el,onglet);
		for(var i=0;i<onglet.Moteur.length;i++)
		{
			el.append('<div id="OsMoteur'+onglet.Moteur[i].Id+'"></div>');
			this.GenereMoteur(jQuery('#OsMoteur'+onglet.Moteur[i].Id,el),onglet.Moteur[i],onglet);
			if(onglet.Moteur[i].Metier==6) break;
		}
		if(onglet.Moteur.length >1 && onglet.Moteur[0].Metier!=6)  
		{
			var pref = this.GetPref("OsSelChoixMoteur"+onglet.Id);
			this.MasqueToutMoteur(el,onglet);
			if(pref!="") this.AfficheMoteur(el,pref);
			else this.AfficheMoteur(el,onglet.Moteur[0].Id);
		}
	},
	Lg : function(obj) 
	{
		if(typeof(obj)=="undefined") return "";
		for(var i = 0;i<obj.length;i++) {if (obj[i].IdL==this.Conf.Langue) return obj[i].Val;}
		return "";
	},
	SetSelectOngletCallback : function(callback)
	{
		this.SelectOngletCallback = callback;
	},
	SetAfficheCallback : function(callback)
	{
		this.AfficheCallback = callback;
	},
	SetPostCallback : function(callback)
	{
		this.PostCallback = callback;
	},
	SetLocalisationCallback : function(callback)
	{
		this.LocalisationCallback = callback;
	},
	DonneSelCritereLocalisation :function(mId)
	{
		var moteur = this.DonneMoteur(mId);
		if(moteur==null) return null;
		var nomid = "#OsListeIdCommune"+mId;
		var crit = this.DonneCrit(moteur,"lieu");
		if(crit==null) 
		{
			crit = this.DonneCrit(moteur,"insee");
			nomid = "#OsListeInsee"+mId;
		}	
		if(crit==null || crit.Mode==1) return null;
		return jQuery(nomid,jQuery("#Os"+this.Data.Id,jQuery('#'+this.Conf.ObjId)));
	},
	GetLocalisationEnCours : function(mId)
	{
		var el = this.DonneSelCritereLocalisation(mId);
		if(el==null) return null;
		try {return el.get(0).selectedIndex;} catch(e) {return null;}
	},
	SetLocalisation : function(mId,index)
	{
		var el = this.DonneSelCritereLocalisation(mId);
		if(el != null && el.get(0).options != undefined) 
		{
			el.get(0).selectedIndex = (el.get(0).options.length <= index) ? (el.get(0).options.length-1) : index;
			this.SetPref(el.get(0).id,el.get(0).selectedIndex);
		}
	},
	SetLocalisationEnCours : function(index,idmoteur)
	{
		var mId = idmoteur || null;
		if(mId!=null) this.SetLocalisation(mId,index);
		else 
		{
			for(var i=0;i<this.Data.Onglet.length;i++) 
			{	
				var onglet = this.Data.Onglet[i];
				for(var j=0;j<onglet.Moteur.length;j++) 
				{
					this.SetLocalisation(onglet.Moteur[j].Id,index);
				}
			}		
		}
		
	}
	
};


function OsFG(objid,id,lg,style,style_cal)
{
	this.Style = style || "mini";
	this.StyleCal = style_cal || "calendar-blue";
	this.TabPref=new Array();this.ObjId=objid;this.ListeIdFournMoteur = new Array();this.CodeOsMoteur=new Array();this.OngInv = new Array();this.AliasMoteur = new Array();this.VarMoteur= new Array();this.ListeChoix = new Array(); this.ListeCritere= new Array();this.DomaineMoteur = new Array();this.TargetMoteur = new Array();this.Id = id;this.Langue=lg; this.DateDebut = new Date();this.AutoDate=true;this.OsGad = new OsGadget();	
	
};



OsFG.prototype = {
	Id:null,
	ObjId : null,
	Langue:null,SvCk:null,
	ListeIdFournDef : null,
	ListeIdFournMoteur : null,
	CodeOsDef : null,
	CodeOsMoteur : null,
	DomaineDef:null,
	TargetDef:null,
	DomaineMoteur : null,
	TargetMoteur : null,
	VarMoteur : null,
	ListeChoix : null,
	ListeCritere : null,
	AliasDef : null,
	AliasMoteur : null,
	Style : null,
	StyleCal : null,
	OngInv : null,
	DomaineCookie:null,
	DonneJSONP : function()
	{
		var cset = (document.charset == undefined) ? "":("charset="+escape(document.charset)+"&");
		return "jsonp.aspx?"+cset+"cle="+this.Id+"-"+this.Langue+"&callback=?";
	},
	SetDateDebut : function(date){ this.DateDebut=date;this.AutoDate=false;},
	SetCk : function(ck) {this.SvCk = ck;},
	ListeIdFournisseur : function(liste,idmoteur) 
	{
		var id = idmoteur || null;
		if(id==null) this.ListeIdFournDef = liste;
		else this.ListeIdFournMoteur[id] = liste;
	},
	CodeOs : function(code,idmoteur) 
	{
		var id = idmoteur || null;
		if(id==null) this.CodeOsDef = code;
		else this.CodeOsMoteur[id] = code;
	},
	AliasTerritoire : function(alias, idmoteur)
	{
		var id = idmoteur || null;
		if(id==null) this.AliasDef = alias;
		else this.AliasMoteur[id] = alias;
	},
	Affiche : function() 
	{
		var base = this;
		this.OsGad.Init(this);
		jQuery.each(this.TabPref,function(idx,item) {
			base.OsGad.SetPref(item.id,item.val);
		});
	},
	SetOngletEnCours : function(numonglet)
	{
		this.OsGad.SetOngletCourant(numonglet);
	},
	GetOngletEnCours : function()
	{
		return this.OsGad.GetOngletCourant();
	},
	SetMoteurEnCours : function(id)
	{
		this.OsGad.SetMoteurCourant(id);
	},
	GetMoteurEnCours : function()
	{
		return this.OsGad.GetMoteurCourant();
	},
	Demolette : function(id)
	{
		return this.OsGad.Demolette(id);
	},
	SurSelectOnglet : function(callback)
	{
		this.OsGad.SetSelectOngletCallback(callback);	
	},
	SurAffiche : function(callback)
	{
		this.OsGad.SetAfficheCallback(callback);
	},
	SurPost : function(callback)
	{
		this.OsGad.SetPostCallback(callback);
	},
	SurLocalisation : function(callback)
	{
		this.OsGad.SetLocalisationCallback(callback);
	},
	GetLocalisationEnCours : function(idmoteur)
	{
		return this.OsGad.GetLocalisationEnCours(idmoteur);
	},
	SetLocalisationEnCours : function(index,idmoteur)
	{
		this.OsGad.SetLocalisationEnCours(index,idmoteur);
	},
	SetOptionAffichage : function(options)
	{
		this.OsGad.OptionAffichage = options;
	},
	SetDomaine : function(domaine,idmoteur) 
	{
		var id = idmoteur || null;
		if(id==null) this.DomaineDef = domaine;
		else this.DomaineMoteur[id] = domaine;
	},
	SetTarget : function(target,idmoteur) 
	{
		var id = idmoteur || null;
		if(id==null) this.TargetDef = target;
		else this.TargetMoteur[id] = target;
	},
	AffecteDansListe : function(obj,el) 
	{	
		var trouve = false;
		jQuery.each(obj,function(idx,item) {
			if(item.Nom==el.Nom) 
			{
				obj[idx] = el;trouve=true;return false;
			}
			return true;
		});
		if(!trouve) obj[obj.length] = el;
		
	},
	SetVariable : function(idmoteur,nom,val)
	{
		if(this.VarMoteur[idmoteur]==null) this.VarMoteur[idmoteur] = new Array();
		this.AffecteDansListe(this.VarMoteur[idmoteur],{"Nom":nom,"Val":val});
	},
	SetListe : function(idmoteur,el) 
	{
		if(this.ListeChoix[idmoteur]==null) this.ListeChoix[idmoteur] = new Array();
		this.AffecteDansListe(this.ListeChoix[idmoteur],el);
	},
	SetCritere : function(el)
	{
		// Par rapport au critère les propriétés suivantes doivent être ajoutées : Nom - Ordre - IdMoteur
		this.AffecteDansListe(this.ListeCritere,el);
	},
	SetOngletInactif : function(num)
	{
		this.OngInv.push(num);
	},
	SetPref : function(nom,valeur,idmoteur)
	{
		if(idmoteur==undefined)	this.TabPref[this.TabPref.length] = {"id":nom,"val":valeur};
		else this.TabPref[this.TabPref.length] = {"id":nom+idmoteur,"val":valeur}
	}
	
};
