// Script pour la gestion du panier et des onglets dans la page /reservation/descriptif.php

// --------------------------------------- PANIER -----------------------------------------------
var panier=null;
var pppInfos=null;
function initPanier() {
    var js=requestSelect('/reservation/ajax/panier.php?action=init_panier');
    eval(js);
    initMaterielProduits();
    panier.affiche();
    panier.majOnglets();
}

function initMaterielProduits() {
    if (panier!=null) {
        if (panier.Materiel!=null) {
            if (panier.Materiel.ShopID!=0) {
                var url='',js='';
                url='/skiset/checkProduits.php?ShopID='+panier.Materiel.ShopID;
                url+='&DteFrom='+panier.Materiel.DteFrom;
                url+='&NbJours='+panier.Materiel.NbJours;
                js=requestSelect(url);
                eval(js);
                panier.Materiel.majFormule();
            }
        }
    }
}

function initMaterielResorts() {
    if (panier!=null) {
        if (panier.Materiel!=null) {
            if (panier.Materiel.tabResort.length==0) {
                eval(requestSelect('/skiset/checkResorts.php'));
            }
        }
    }
}

// Objet Panier
function Panier () {

	// Attributs
	this.Action='coord.php';
	this.AffiliateID=null;
	this.Hebergement=null; // objet de classe Hebergement
	this.Materiel=null; // objet de classe Materiel
	this.TotalPublic=0;
	this.Total=0;
	this.Nom=''; // Pour la commande de prestations dans l'espace commande
	this.width=210;
	
	if(navigator.appName=='Microsoft Internet Explorer') {
		window.onresize = null;
		window.onscroll = null;
	} else if (typeof(intervalFollow)!='undefined'){
		clearInterval(intervalFollow);
	}
	
	// Méthode de vérification des totaux et assurance
	this.calculTotal=function() {
		var iLog,iPresta;
		this.TotalPublic=0;
		this.Total=0;
                if (this.Hebergement!=null) {
                    this.Hebergement.TotalPublic=0;
                    this.Hebergement.Total=0;
                    for (iLog=0;iLog<this.Hebergement.Logements.length;iLog++) {
    			this.Hebergement.TotalPublic+=this.Hebergement.Logements[iLog].TarifPublic;
			this.Hebergement.Total+=this.Hebergement.Logements[iLog].Tarif;
                    }
                    for (iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
                        if ((' '+this.Hebergement.Prestations[iPresta].TypePresta).indexOf('Annexes')>0) {
				if (this.Hebergement.Prestations[iPresta].Quantite>0) {
					this.Hebergement.TotalPublic+=this.Hebergement.Prestations[iPresta].PrixPublic*this.Hebergement.Prestations[iPresta].Quantite;
					this.Hebergement.Total+=this.Hebergement.Prestations[iPresta].PrixUnitaire*this.Hebergement.Prestations[iPresta].Quantite;
				}
			}
                    }
                    this.TotalPublic+=this.Hebergement.TotalPublic;
                    this.Total+=this.Hebergement.Total;
                }
                if (this.Materiel!=null) {
                        this.Materiel.TotalPublic=0;
                        this.Materiel.Total=0;
                        for (var iPers=0;iPers<this.Materiel.Skieurs.length;iPers++) {
                            this.Materiel.TotalPublic+=this.Materiel.Skieurs[iPers].TarifPublic;
                            this.Materiel.Total+=this.Materiel.Skieurs[iPers].Tarif;
                        }
			this.TotalPublic+=this.Materiel.TotalPublic;
			this.Total+=this.Materiel.Total;
		}
                if (this.Hebergement!=null) {
                    if (this.Hebergement.Assurance!=null) {
                        if (this.Hebergement.Assurance.DejaReserve) {
                            this.Hebergement.Assurance.Prime=round(this.Total*this.Hebergement.Assurance.Coeff,2);
                        } else {
                            this.Hebergement.Assurance.Prime=round(this.Total*this.Hebergement.Assurance.Coeff+this.Hebergement.Assurance.PrimeAvant,2);
                        }
                        this.TotalPublic+=this.Hebergement.Assurance.Prime;
                        this.Total+=this.Hebergement.Assurance.Prime;
                    }
                    if (this.Hebergement.Frais!=null) {
                        this.TotalPublic+=this.Hebergement.Frais.Montant;
                        this.Total+=this.Hebergement.Frais.Montant;
                    }
                }
		if (this.Materiel!=null) {
                    if (this.Materiel.Frais!=null){
			this.TotalPublic+=this.Materiel.Frais.Montant;
			this.Total+=this.Materiel.Frais.Montant;
                    }
		}
		this.TotalPublic=round(this.TotalPublic,2);
		this.Total=round(this.Total,2);
	}
	
	// Méthode d'affichage du panier
	this.affiche=function() {
                // Vérification des totaux
		this.calculTotal();
		
		var html='';

		// Affichage textuel
		// Logements
                if (this.Hebergement!=null) {
                    for (iLog=0;iLog<this.Hebergement.Logements.length;iLog++) {
			var AlloID=this.Hebergement.Logements[iLog].AlloID;
			var Tarif=this.Hebergement.Logements[iLog].Tarif;
			var qte=1;
			for (j=(iLog+1);j<this.Hebergement.Logements.length;j++) {
				if (this.Hebergement.Logements[j].AlloID==AlloID&&this.Hebergement.Logements[j].Tarif==Tarif) {
					iLog=j;
					qte++;
				}
			}
                        if (Tarif>0) {
                            html+='<div class="divPanierPresta">';
                            html+='<span class="ellipsis"><img class="picto_fleche" src="/images/spacer.gif" alt=""/> '+this.Hebergement.Logements[iLog].NomLog+'</span>';
                            html+='</div>';
                            html+='<div class="divPanierMultiCol"><div class="divPanierQte">'+qte+'x</div></div>';
                        }
                    }
		}
		
		// Matériel
		if ((this.Materiel!=null)&&(this.Materiel.Total>0)) {
			var tab=new Array();
			var i,j,k;
			for (i=0;i<this.Materiel.Skieurs.length;i++) {
				if ((this.Materiel.Skieurs[i])&&(this.Materiel.Skieurs[i].Tarif>0)) {
					tab[tab.length]=this.Materiel.Skieurs[i];
				}
			}
			i=0;
			var NbCasque=0;
			while(i<tab.length) {
				var Ski=tab[i].Ski;
				var Chaussure=tab[i].Chaussure;
				if ((Ski===true)&&(Chaussure===false)) {
					html+='<div class="divPanierPresta"><span class="ellipsis"><img class="picto_fleche" src="/images/spacer.gif" alt=""/> '+strMaterielSeul+'</span></div>';
				} else if ((Ski===true)&&(Chaussure===true)) {
					html+='<div class="divPanierPresta"><span class="ellipsis"><img class="picto_fleche" src="/images/spacer.gif" alt=""/> '+strMaterielChaussures+'</span></div>';
				} else if ((Ski===false)&&(Chaussure===true)) {
					html+='<div class="divPanierPresta"><span class="ellipsis"><img class="picto_fleche" src="/images/spacer.gif" alt=""/> '+strChaussuresSeules+'</span></div>';
				}
				j=i;
				while (j<tab.length) {
					if ((tab[j].Ski==Ski)&&(tab[j].Chaussure==Chaussure)) {
						var Qte=1;
						var Packcategory=tab[j].Packcategory;
						if (tab[j].Casque) {
							NbCasque++;
						}
						k=(j+1);
						while (k<tab.length) {
							if ((tab[k].Packcategory==Packcategory)&&(tab[k].Ski==Ski)&&(tab[k].Chaussure==Chaussure)) {
								Qte++;
								if (tab[k].Casque) {
									NbCasque++;
								}
								tab.splice(k,1);
							} else {
								k++;
							}
						}
						html+='<div class="divPanierMultiCol"><div class="divPanierQte">'+Qte+'x '+Packcategory+'</div></div>';
						tab.splice(j,1);
					} else {
						j++;
					}
				}
			}
			if (NbCasque>0) {
				html+='<div class="divPanierMultiCol"><div class="divPanierQte">'+NbCasque+'x '+strCasque+'</div></div>';
			}
		}

		if (this.Hebergement!=null) {
                    // Affichage des prestations
                    for (iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
    			if (((' '+this.Hebergement.Prestations[iPresta].TypePresta).indexOf('Annexe')>0)||(this.Hebergement.Prestations[iPresta].Unites.length>0)) {
				html+='<div class="divPanierPresta"><span class="ellipsis"><img class="picto_fleche" src="/images/spacer.gif" alt=""/> '+this.Hebergement.Prestations[iPresta].Descriptif+'</span></div>';
				html+='<div class="divPanierMultiCol"><div class="divPanierQte">'+this.Hebergement.Prestations[iPresta].Quantite+'x</div>';
				html+='<div class="divPanierModif">';
				if (((' '+this.Hebergement.Prestations[iPresta].TypePresta).indexOf('Annexe')>0)&&this.Hebergement.Prestations[iPresta].Modifiable) {
					html+='<a href="javascript:panier.changePrestation('+this.Hebergement.Prestations[iPresta].PrestationID+',\'-\')"><img src="/images/moins.png" alt="-"/></a><a href="javascript:panier.changePrestation('+this.Hebergement.Prestations[iPresta].PrestationID+',\'+\')"><img src="/images/plus.png" alt="+"/></a>';
				}
				html+='</div></div>';
				if (document.getElementById('Qte'+this.Hebergement.Prestations[iPresta].PrestationID)) {
					document.getElementById('Qte'+this.Hebergement.Prestations[iPresta].PrestationID).innerHTML=this.Hebergement.Prestations[iPresta].Quantite;
				}
			}
                    }
                    // Affichage de l'assurance
                    if (this.Hebergement.Assurance!=null) {
			html+='<div class="divPanierPresta"><span class=ellipsis><img class="picto_fleche" src="/images/spacer.gif" alt=""> '+this.Hebergement.Assurance.Descriptif+'</span></div>';
			html+='<div class="divPanierMultiCol"><div class="divPanierQte">1x</div>';
			html+='<div class="divPanierModif">';
			if (this.Hebergement.ResaID==0) {
				html+='<a href="javascript:panier.suppAssurance();" ><img src="/images/moins.png" alt="-"/></a>';
			}
			html+='</div><div class="divPanierPrix">'+this.showDecimals(this.Hebergement.Assurance.Prime)+' &euro;</div></div>';
			this.checkObj('ChpPresta'+this.Hebergement.Assurance.PrestationID,true);
                    } else if ((typeof(assurance)!='undefined')&&(assurance!=null)) {
    			this.checkObj('ChpPresta'+assurance.PrestationID,false);
                    }
		}
		
		// Affichage des frais
		if (((this.Hebergement!=null)&&(this.Hebergement.Frais!=null))||((this.Materiel!=null)&&(this.Materiel.Frais!=null))) {
                        html+='<div class="divPanierPresta"><span class=ellipsis><img class="picto_fleche" src="/images/spacer.gif" align="absmiddle" /> ';
                        if ((this.Hebergement!=null)&&(this.Hebergement.Frais!=null)) {
                            html+=this.Hebergement.Frais.Descriptif;
                        } else {
                            html+=this.Materiel.Frais.Descriptif;
                        }
			html+='</span></div>';
			if ((this.Hebergement!=null)&&(this.Hebergement.Frais!=null)&&(this.Hebergement.Frais.Montant>0)) {
				html+='<div class="divPanierMultiCol"><div class="divPanierQte">1x '+round(this.Hebergement.Frais.Montant,0)+'&euro;</div><div class="divPanierPrix">'+this.showDecimals(this.Hebergement.Frais.Montant)+' &euro;</div></div>';
			}
			if ((this.Materiel!=null)&&(this.Materiel.Frais!=null)&&(this.Materiel.Frais.Montant>0)) {
				html+='<div class="divPanierMultiCol"><div class="divPanierQte">'+round(this.Materiel.Frais.Montant/this.Materiel.Frais.ParPers,0)+'x '+this.Materiel.Frais.ParPers+'&euro;</div><div class="divPanierPrix">'+this.showDecimals(this.Materiel.Frais.Montant)+' &euro;</div></div>';
			}
		}
		// Affichage du total
		html+='<div class="divPanierMultiCol"><div class="divPanierQte" style="color:red"><b>TOTAL</b></div><div class="divPanierPrix" style="color:red"><b>'+this.showDecimals(this.Total)+' &euro;</b></div></div>';
		// Affichage des économies
		var economie=round(this.TotalPublic-this.Total,2);
		if (economie>0) {
			html+='<div class="divPanierPresta" style="color:#009900">'+strEconomie+'</div><div class="divPanierPrix" style="color:#009900">'+this.showDecimals(economie)+' &euro;</div>';
		}
		// Affichage du bouton
                var surplace='';
                var trouveSurplace=false;
		if (this.Hebergement!=null) {
			surplace+='<div class="divPanierARegler">'+strAReglerSurPlace+'</div>';
			for (iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
				if (this.Hebergement.Prestations[iPresta].Quantite>0) {
					if ((this.Hebergement.Prestations[iPresta].TypePresta=='Obligatoires')||(this.Hebergement.Prestations[iPresta].TypePresta=='Facultatives')) {
                                                trouveSurplace=true;
						surplace+='<div class="divPanierPresta"><span class="ellipsis1"><img class="picto_fleche" src="/images/spacer.gif" alt=""/> '+this.Hebergement.Prestations[iPresta].Descriptif;
						surplace+='</span></div>';
					}
				}
			}
		}
		if ((this.Total>0)||((this.Hebergement!=null)&&(this.Hebergement.ResaID>0)&&(trouveSurplace))) {
                    // Si le total existe ou qu'on est dans l'espace commande et qu'il y a des prestations à régler sur place
                    html+='<div style="text-align:center;clear:both;"><a id="panierSuivant" href="'+this.Action+'" onclick="return panier.verifDonnees();" class="bouton bouton_important">'+strSuivant+'</a></div>';
		}
                html+=surplace;
		var div=document.getElementById('DivPanier');
		if (div) {
                    // le DivPanier existe, on est donc :
                    // - soit dans le moteur hébergement
                    // - soit dans le moteur matériel
                    // - soit dans l'espace commande
                    div.innerHTML=html;
                    this.overEllipsis();
		} else if (document.getElementById('Prenom0')&&this.Materiel.Total>0) {
                    // on est dans la procédure de transfert de matériel dans l'étape 2 et au moins un skieur est paramètré
                    div=document.getElementById('divSuivant');
                    if (div) {
                        div.style.visibility='visible';
                    }
                }
		
	}
	
        this.majOnglets=function majOnglets() {
            var tab,i,iPresta;
            // Décocher toutes les prestations facultatives
            tab=document.getElementsByTagName('INPUT'); // tableau de tous les <input>
            for (i=0;i<tab.length;i++) { // parcours du tableau
                // Si l'objet est de type checkbox, que son id contient chpPresta, et qu'il n'est pas disabled
                if ((tab[i].type=='checkbox')&&((' '+tab[i].id).indexOf('ChpPresta')>0)&&(!tab[i].disabled)) {
                    // On décoche
                    tab[i].checked=false;
                }
            } // parcours du tableau
            // On remet à zéro les prestations annexes
            tab=document.getElementsByTagName('DIV'); // tableau de tous les <div>
            for (i=0;i<tab.length;i++) { // parcours du tableau
                // Si l'objet est de class qte et que son id contient Qte
                if ((tab[i].className=='qte')&&((' '+tab[i].id).indexOf('Qte')>0)) {
                    tab[i].innerHTML='0';
                }
            }
            if (this.Hebergement!=null) {
                for (iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
                    if (this.Hebergement.Prestations[iPresta].TypePresta=='Facultatives') {
                        if (document.getElementById('ChpPresta'+this.Hebergement.Prestations[iPresta].PrestationID)) {
                            document.getElementById('ChpPresta'+this.Hebergement.Prestations[iPresta].PrestationID).checked=true;
                        }
                    } else if ((' '+this.Hebergement.Prestations[iPresta].TypePresta).indexOf('Annexes')>0) {
                        if (document.getElementById('Qte'+this.Hebergement.Prestations[iPresta].PrestationID)) {
                            document.getElementById('Qte'+this.Hebergement.Prestations[iPresta].PrestationID).innerHTML=this.Hebergement.Prestations[iPresta].Quantite;
                        }

                    }
                }
                if (this.Hebergement.Assurance!=null) {
                    if (document.getElementById('ChpPresta'+this.Hebergement.Assurance.PrestationID)) {
                        document.getElementById('ChpPresta'+this.Hebergement.Assurance.PrestationID).checked=true;
                    }
                }
            }
            if (this.Materiel!=null) {
                this.Materiel.majFormule();
            }
        }

        this.verifDonnees=function () {
            var iPresta;
            var retour=true;
            var htmlPopup='';
            if (this.Hebergement!=null) {
                for (iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
                    // S'il y a des champs à remplir pour cette prestation
                    if (this.Hebergement.Prestations[iPresta].Champs.length>0) {
                        if (!this.Hebergement.Prestations[iPresta].DonneesCompletes()) {
                            retour=false;
                        }
                        htmlPopup+=this.Hebergement.Prestations[iPresta].generePopup(iPresta);
                    }
                }
            }
            if (!retour) {
                if (pppInfos!=null) {
                    if (pppInfos.exists()) {
                        popupClose(pppInfos.index);
                    }
                }
                pppInfos=new popup();
                if (langue=='') {
                    pppInfos.title="Merci de complèter vos informations";
                } else if (langue=='_uk') {
                    pppInfos.title="Please fill your information";
                } else if (langue=='_es') {
                    pppInfos.title="Gracias de completar su información";
                }
                htmlPopup+='<p style="text-align:center"><input type="button" class="bouton" value="ok" onclick="if (!panier.verifDonnees()) { alert(ppp.title);}"/></p>';
                pppInfos.contenu=htmlPopup;
                pppInfos.affiche();
                return false;
            } else if (pppInfos!=null) {
                if (pppInfos.exists()) {
                    popupClose(pppInfos.index);
                }
                pppInfos=null;
            }
            if (this.Materiel!=null) {
                if (this.Materiel.Skieurs.length>0) {
                    for (var iPers=0;iPers<this.Materiel.Skieurs.length;iPers++) {
                        if ((this.Materiel.Skieurs[iPers].PackID>0)&&(this.Materiel.Skieurs[iPers].Prenom=='')) {
                            var div=document.getElementById('OngletMatos');
                            if (div) {
                                if (div.className=='OngletContenuInactif') {
                                    afficheOnglet('Matos');
                                }
                            }
                            alert(strErreurChamp+' "'+strPrenom+'"');
                            document.getElementById('Prenom'+this.Materiel.Skieurs[iPers].iPers).focus();
                            return false;
                        }
                    }
                }
            }
            return true;
	}
	
	// Méthode permettant de retrouver un objet input checkbox d'après son id
	this.checkObj=function (id,value) {
		var tabInput=document.getElementsByTagName('INPUT');
		var iInput;
		for (iInput=0;iInput<tabInput.length;iInput++) {
			if ((tabInput[iInput].id==id)&&(tabInput[iInput].type=='checkbox')) {
				tabInput[iInput].checked=value;
			}
		}
	}
	
	// Méthode pour ajouter une(des) prestation(s) : attend une variable de type Prestation
	this.addPrestation=function(PrestationID,Descriptif,TypePresta,PrixPublic,PrixUnitaire,Quantite,QteAutre,Champs) {
		// Recherche si la prestation existe déjà
		var trouve=false;
		var iPresta;
		for (iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
			if ((this.Hebergement.Prestations[iPresta].PrestationID==PrestationID)&&(this.Hebergement.Prestations[iPresta].PrixUnitaire==PrixUnitaire)) {
				trouve=true;
				var iPrestaTrouve=iPresta;
			}
		}
		// Si elle existe on ajoute la quantité à celle déjà existante
		if (trouve) {
			this.Hebergement.Prestations[iPrestaTrouve].Quantite+=Quantite;
                        if (this.Hebergement.Prestations[iPrestaTrouve].Quantite<=0) {
                            if (document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID)) {
        			document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID).innerHTML='0';
                            }
                            this.Hebergement.Prestations.splice(iPrestaTrouve,1);
                            requestUpdate('/reservation/ajax/panier.php?action=supp_presta&PrestationID='+PrestationID,'',false);
                        } else {
                            if (document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID)) {
        			document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID).innerHTML=this.Hebergement.Prestations[iPrestaTrouve].Quantite;
                            }
                            requestUpdate('/reservation/ajax/panier.php?action=change_presta&PrestationID='+PrestationID+'&chp=Quantite&chpvalue='+this.Hebergement.Prestations[iPrestaTrouve].Quantite,'',false);
                        }
		} else if (Quantite>0) { // Sinon on la crée
                        trouve=true;
			var iPrestaTrouve=this.Hebergement.Prestations.length;
			this.Hebergement.Prestations[iPrestaTrouve]=new Prestation(PrestationID,Descriptif,TypePresta,PrixPublic,PrixUnitaire,Quantite,QteAutre,Champs);
                        var url='/reservation/ajax/panier.php?action=add_presta';
                        url+='&PrestationID='+PrestationID;
                        url+='&Descriptif='+escape(Descriptif);
                        url+='&TypePresta='+TypePresta;
                        url+='&PrixPublic='+PrixPublic;
                        url+='&PrixUnitaire='+PrixUnitaire;
                        url+='&Quantite='+Quantite;
                        url+='&QteAutre='+QteAutre;
                        if (document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID)) {
        			document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID).innerHTML=this.Hebergement.Prestations[iPrestaTrouve].Quantite;
                        }
                        requestUpdate(url,'',false);
		}
		this.affiche();
	}
	
        // Méthode pour modifier la quantité d'une prestation
        this.changePrestation=function(PrestationID,mode) {
            // Recherche de la prestation
            for (var iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
                if (this.Hebergement.Prestations[iPresta].PrestationID==PrestationID) {
                    if (mode=='+') {
                        this.Hebergement.Prestations[iPresta].Quantite++;
                    } else {
                        this.Hebergement.Prestations[iPresta].Quantite--;
                    }
                    if (this.Hebergement.Prestations[iPresta].Quantite<=0) {
                        this.suppPrestation(PrestationID);
                    } else {
                        requestUpdate('/reservation/ajax/panier.php?action=change_presta&PrestationID='+PrestationID+'&chp=Quantite&chpvalue='+this.Hebergement.Prestations[iPresta].Quantite,'',false);
                    }
                    this.affiche();
                    return;
                }
            }
        }
        
        // Méthode pour supprimer une prestation
	this.suppPrestation=function (PrestationID) {
                requestUpdate('/reservation/ajax/panier.php?action=supp_presta&PrestationID='+PrestationID,'',false);
		// Recherche de l'index de la prestation
		var iPrestaTrouve=-1;
		var iPresta;
		for (iPresta=0;iPresta<this.Hebergement.Prestations.length;iPresta++) {
			if (this.Hebergement.Prestations[iPresta].PrestationID==PrestationID) {
                            iPrestaTrouve=iPresta;
			}
		}
                if (iPrestaTrouve>=0) {
                    if (document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID)) {
			document.getElementById('Qte'+this.Hebergement.Prestations[iPrestaTrouve].PrestationID).innerHTML='0';
                    }
                    this.Hebergement.Prestations.splice(iPrestaTrouve,1);
                    this.affiche();
                }
	}
	
	// Méthode pour ajouter l'assurance
        this.addAssurance=function (PrestationID,Descriptif,Coeff,PrimeAvant) {
            if (PrimeAvant==null) {
                PrimeAvant=0;
            }
            if (this.Hebergement!=null) {
                this.Hebergement.Assurance=new Assurance();
                this.Hebergement.Assurance.PrestationID=PrestationID;
                this.Hebergement.Assurance.Descriptif=Descriptif;
                this.Hebergement.Assurance.Coeff=Coeff;
                this.Hebergement.Assurance.PrimeAvant=PrimeAvant;
                if (document.getElementById('ChpPresta'+PrestationID)) {
                    document.getElementById('ChpPresta'+PrestationID).checked=true;
                }
                this.affiche();
                requestUpdate('/reservation/ajax/panier.php?action=add_assurance','',false);
            }
        }
        
        // Méthode pour supprimer l'assurance
	this.suppAssurance=function () {
                if (document.getElementById('ChpPresta'+this.Hebergement.Assurance.PrestationID)) {
                    document.getElementById('ChpPresta'+this.Hebergement.Assurance.PrestationID).checked=false;
                }
		this.Hebergement.Assurance=null;
		this.affiche();
                requestUpdate('/reservation/ajax/panier.php?action=supp_assurance','',false);
	}
	
	// Méthode pour afficher un nombre avec ses décimales
	this.showDecimals=function (val) {
		if (val%1==0) {
			return val+'.00';
		} else if ((round(val%1,2)*10)%1==0) {
			return val+'0';
		} else {
			return round(val,2);
		}
	}
	
	this.overEllipsis=function () {
		var etiquette=document.getElementById('DivEtiquette');
		if (!etiquette) {
			var objBody=document.getElementsByTagName('BODY')[0];
			var etiquette=document.createElement('DIV');
			etiquette.id="DivEtiquette";
			etiquette.style.position='absolute';
			etiquette.style.visibility='hidden';
			etiquette.style.left='0px';
			etiquette.style.top='0px';
			etiquette.style.zIndex=100;
			etiquette.style.border='1px solid #666666';
			etiquette.style.backgroundColor='white';
			etiquette.style.padding='2px';
			etiquette.className='nobr';
			objBody.appendChild(etiquette);
		}
		
		var tabSpan=document.getElementsByTagName('SPAN');
		var iSpan;
		for (iSpan=0;iSpan<tabSpan.length;iSpan++) {
			if ((' '+tabSpan[iSpan].className).indexOf('ellipsis')>0) {
				if (tabSpan.contenu==null) {
					tabSpan[iSpan].contenu=tabSpan[iSpan].innerHTML;
				}
				if (tabSpan[iSpan].className=='ellipsis') {
					tabSpan[iSpan].style.backgroundColor='#FFFFFF';
				} else {
					tabSpan[iSpan].style.backgroundColor='#FFFFFF';
				}
				if (tabSpan[iSpan].scrollWidth>document.getElementById('DivPanier').offsetWidth) {
					tabSpan[iSpan].onmouseover=function() {
						etiquette=document.getElementById('DivEtiquette');
						etiquette.style.visibility='visible';
						etiquette.innerHTML=this.contenu;
						document.onmousemove=function (e) {
							var html=document.getElementsByTagName('HTML')[0];
							var body=document.getElementsByTagName('BODY')[0];
							if (navigator.appName.substring(0,3) == "Net") {
								var y=e.pageY;
								var x=e.pageX;
							} else {
								var y=event.clientY+html.scrollTop+body.scrollTop;
								var x=event.clientX+html.scrollLeft+body.scrollLeft+10;
							}
							var etiquette=document.getElementById('DivEtiquette');
							if ((x+etiquette.offsetWidth)>=(html.scrollLeft+html.offsetWidth)) {
								x=html.scrollLeft+html.offsetWidth-etiquette.offsetWidth-5;
							} else {
								x+=5;
							}
							if (etiquette) {
								etiquette.style.left=x+'px';
								etiquette.style.top=(y+10)+'px';
							}
						}
					}
					tabSpan[iSpan].onmouseout=function() {
						etiquette=document.getElementById('DivEtiquette');
						etiquette.style.visibility='hidden';
						etiquette.innerHTML='';
						document.onmousemove=null;
					}
				}
			}
		}
	}
	
}

// Objet Hebergement
function Hebergement (DteFrom,NbNuits,DteTo,PlanID) {
        this.PlanID=null;
	this.DteFrom=null;
	this.DteTo=null;
	this.NbNuits=null;
	this.Logements=new Array();
	this.Assurance=null;
	this.Prestations=new Array();
        this.TotalPublic=0;
        this.Total=0;
        this.Frais=null;
	this.ResaID=0; // Pour la commande de prestations dans l'espace commande
}

// Objet Logement
function Logement (AlloID,NomLog,TarifPublic,Tarif) {
	this.AlloID=AlloID;
	this.NomLog=NomLog;
	this.TarifPublic=TarifPublic; // PrixPublic unitaire
	this.Tarif=Tarif; // PrixPublic unitaire
}

// Objet Prestation
function Prestation (PrestationID,Descriptif,TypePresta,PrixPublic,PrixUnitaire,Quantite,QteAutre,Champs) {
	if (QteAutre==null) {
            this.QteAutre=1;
        } else {
            this.QteAutre=QteAutre;
        }
        this.PrestationID=PrestationID;
	this.Descriptif=Descriptif;
	this.TypePresta=TypePresta;
	this.PrixUnitaire=PrixUnitaire;
	this.PrixPublic=PrixPublic;
	this.Quantite=Quantite;
	this.Modifiable=true;
	this.Champs=Champs;
	this.Unites=new Array();
	
	this.DonneesCompletes=function () {
		var retour=true;
		var iUnite=0,iChp=0;
		// S'il n'y a pas autant d'unités que de quantité de prestations sélectionnées
		if (this.Unites.length<(this.Quantite*this.QteAutre)) {
			retour=false;
			for (iUnite=this.Unites.length;iUnite<(this.Quantite*this.QteAutre);iUnite++) {
				this.Unites[iUnite]=new Unite();
				for (iChp=0;iChp<this.Champs.length;iChp++) {
					this.Unites[iUnite].Champs[iChp]='';
				}
			}
		} else {
			for (iUnite=0;iUnite<(this.Quantite*this.QteAutre);iUnite++) {
				if (this.Unites[iUnite].Champs.length<this.Champs.length) {
					retour=false;
					for (iChp=this.Unites[iUnite].Champs.length;iChp<this.Champs.length;iChp++) {
						this.Unites[iUnite].Champs[iChp]='';
					}
				} else {
					for (iChp=0;iChp<this.Champs.length;iChp++) {
						if (this.Unites[iUnite].Champs[iChp]=='') {
							retour=false;
						}						
					}
				}
			}
		}
		return retour;
	}
	
	this.generePopup=function (iPresta) {
		var html='';
		html+='<div style="margin-top:1em"><b>'+this.Descriptif+'</b><br/>';
		var iUnite,iChp;
		for (iUnite=0;iUnite<(this.Quantite*this.QteAutre);iUnite++) {
			html+='<nobr><b>N°'+(iUnite+1)+'</b>';
			for (iChp=0;iChp<this.Champs.length;iChp++) {
				html+=' '+this.Champs[iChp].NomChamp+' <input id="Chp-'+this.PrestationID+'-'+iUnite+'-'+iChp+'" class="text" onchange="panier.Hebergement.Prestations['+iPresta+'].changeValue(this.value,'+iUnite+','+iChp+');"';
				if (this.Champs[iChp].TypeChamp=='date') {
					html+=' style="width:5em" maxlength="10"';
					if (this.Unites[iUnite].Champs[iChp]=='') {
						html+=' value="';
						if (panier.Langue=='') {
							html+='jj/mm/aaaa';
						} else if (panier.Langue=='_uk') {
							html+='dd/mm/yyyy';
						} else if (panier.Langue=='_es') {
							html+='dd/mm/aaaa';
						}
						html+='"';
					} else {
						html+=' value="'+this.Unites[iUnite].Champs[iChp]+'"';
					}
				} else {
					html+=' style="width:10em"';
					if (this.Unites[iUnite].Champs[iChp]!='') {
						html+=' value="'+this.Unites[iUnite].Champs[iChp]+'"';
					}
				}
				html+='/>';
			} // for (iChp<this.Champs.length)
			html+='</nobr><br/>';
		} // for (iUnite<(this.Quantite*this.QteAutre))
		html+='</div>';
		return html;
	}
	
	this.changeValue=function (valeur,iUnite,iChp) {
		var TypeChamp=this.Champs[iChp].TypeChamp;
		if (TypeChamp=='date') {
			var maskDate=new RegExp("^[0-9]{2}[/][0-9]{2}[/][0-9]{4}$","");
			if (!maskDate.exec(valeur)) {
				if (panier.Langue=='') {
					document.getElementById('Chp-'+this.PrestationID+'-'+iUnite+'-'+iChp).value='jj/mm/aaaa';
				} else if (panier.Langue=='_uk') {
					document.getElementById('Chp-'+this.PrestationID+'-'+iUnite+'-'+iChp).value='dd/mm/yyyy';
				} else if (panier.Langue=='_es') {
					document.getElementById('Chp-'+this.PrestationID+'-'+iUnite+'-'+iChp).value='dd/mm/aaaa';
				}
				valeur='';
			} 
		}
		this.Unites[iUnite].Champs[iChp]=valeur;
                requestUpdate('/reservation/ajax/panier.php?action=maj_unite&PrestationID='+this.PrestationID+'&iUnite='+iUnite+'&iChp='+iChp+'&value='+escape(valeur),'',false);
		panier.affiche(false);
	}
}

// Objet Unite
function Unite () {
	this.Champs=new Array();
}

// Objet Assurance
function Assurance () {
	this.PrestationID=0;
	this.Descriptif='';
	this.Prime=0;
	this.Coeff=0;
	this.DejaReserve=false;
        this.PrimeAvant=0;
}

// Objet Frais
function Frais () {
	this.Descriptif='';
        this.ParPers=1;
	this.Montant=0;
}

// Objet Champ
function Champ (NomChamp,TypeChamp) {
	this.NomChamp=NomChamp;
	this.TypeChamp=TypeChamp;
}

// Objet Materiel
function Materiel () {
    this.ResortID=0;
    this.ShopID=0;
    this.DteFrom='';
    this.NbJours=6;
    this.NbPers=0;
    this.Skieurs=new Array();
    this.tabProd=new Array();
    this.tabResort=new Array();
    this.TotalPublic=0;
    this.Total=0;
    this.Frais=new Frais();

    // Affichage de l'étape 1
    this.etape1=function () {
        initMaterielResorts();
	document.getElementById('DivSkiset').innerHTML=requestSelect('/reservation/ajax/panier.php?action=etape1');
	panier.affiche();
    }
    
    // Affichage de l'étape 2
    this.etape2=function () {
	if (this.NbPers==0) {
            if (langue=='') {
                alert('Veuillez indiquer le champ "Nb. Pers."');
            } else if (langue=='_uk') {
                alert('Please fill-in the field "No. People"');
            } else if (langue=='_es') {
                alert('Por favor llena este espacio "No. Pers."');
            }
            return false;
	}
	if (this.DteFrom=='') {
            if (langue=='') {
                alert('Veuillez indiquer le champ "1er jour de ski"');
            } else if (langue=='_uk') {
                alert('Please fill-in the field "1st day of skiing"');
            } else if (langue=='_es') {
                alert('Por favor llena este espacio "1er día de esquí"');
            }
            return false;
        }
	if (this.ShopID==0) {
            if (langue=='') {
                alert('Veuillez indiquer le champ "Magasin"');
            } else if (langue=='_uk') {
                alert('Please fill-in the field "Shop"');
            } else if (langue=='_es') {
                alert('Por favor llena este espacio "Tienda"');
            }
            return false;
	}
	if (this.NbJours==0) {
            return false;
        }
        if (this.Skieurs.length<this.NbPers) {
            while (this.Skieurs.length<this.NbPers) {
                this.Skieurs[this.Skieurs.length]=new Skieur('',18,0,0,'','ski',true,true,false,0,0,'','','');
            }
        }
        initMaterielProduits();
        html=requestSelect('/reservation/ajax/panier.php?action=etape2');
        document.getElementById('DivSkiset').innerHTML=html;
        for (var iPers=0;iPers<this.Skieurs.length;iPers++) {
            this.Skieurs[iPers].iPers=iPers;
            this.Skieurs[iPers].afficheFormule();
        }
    }

    // Changement de pays
    this.changeCountry=function (value) {
        if (value!='') {
            this.CountryID=parseInt(value);
	} else {
            this.CountryID=0;
	}
	this.ResortID=0;
	this.ShopID=0;
        document.getElementById('DivSkiset').innerHTML=requestSelect('/reservation/ajax/panier.php?action=modif_materiel&chp=ShopID|ResortID|CountryID&chpvalue=0|0|'+value+'&recupEtape1=1');
    }

    // Changement de station
    this.changeResort=function (value) {
	if (value!='') {
            this.ResortID=parseInt(value);
	} else {
            this.ResortID=0;
	}
	this.ShopID=0;
        document.getElementById('DivSkiset').innerHTML=requestSelect('/reservation/ajax/panier.php?action=modif_materiel&chp=ShopID|ResortID&chpvalue=0|'+value+'&recupEtape1=1');
	// Recherche de la station dans this.tabResort
	var i=0;
	var trouve=false;
	while ((i<this.tabResort.length)&&(!trouve)) {
            if ((this.tabResort[i].ResortID==this.ResortID)&&(this.tabResort[i].Map!='')) {
                trouve=true;
            } else {
                i++;
            }
	}
	if (trouve) {
            document.getElementById('DivPlan').innerHTML='<a href="#" onclick="skiset.tabResort['+i+'].ouvrirPlan();return false;" title="'+strCliquezAgrandir+'"><img src="/thumbnails/calcul.php?url=http://www.ski-planet.com'+this.tabResort[i].Map+'&amp;width=500" style="height:12em" alt=""/></a>';
	} else {
            document.getElementById('DivPlan').innerHTML='<img src="/skiset/logo_skiset.png" alt="SKISET"/>';
	}
    }

    this.change=function (quoi,value) {
        if (quoi=='NbPers') {
            this.NbPers=parseInt(value);
        } else if (quoi=='DteFrom') {
            this.DteFrom=value;
        } else if (quoi=='NbJours') {
            this.NbJours=parseInt(value);
        } else if (quoi=='ShopID') {
            this.ShopID=parseInt(value);
        }
        requestUpdate('/reservation/ajax/panier.php?action=modif_materiel&chp='+quoi+'&chpvalue='+value,'',false);
    }
    
    this.majFormule=function() {
        var obj,iPers,iProd;
        for (iPers=0;iPers<this.Skieurs.length;iPers++) {
            if (document.getElementById('Formule'+iPers)) {
                this.Skieurs[iPers].iPers=iPers;
                this.Skieurs[iPers].afficheFormule();
            }
        }
    }

    // Méthode pour calculer et afficher le total de la réservation
    this.calculTotal=function() {
        var iPers;
	this.TotalPublic=0;
	this.Total=0;
	this.Frais.Montant=0;
	for (iPers=0;iPers<this.Skieurs.length;iPers++) {
            if (this.Skieurs[iPers].Tarif!=0) {
                this.Frais.Montant+=this.Frais.ParPers;
		this.TotalPublic+=this.Skieurs[iPers].TarifPublic;
		this.Total+=this.Skieurs[iPers].Tarif;
            }
	}
	this.Total=round(this.Total,2);
	this.TotalPublic=round(this.TotalPublic,2);
	// Affichage
	if (this.Frais.Montant>0) {
            document.getElementById('SpanFrais').innerHTML=panier.showDecimals(this.Frais.Montant)+' &euro;';
	} else {
            document.getElementById('SpanFrais').innerHTML='0 &euro;';
        }
	if (this.Total>0) {
            document.getElementById('SpanTotal').innerHTML=panier.showDecimals(this.Total+this.Frais.Montant)+' &euro;';
	} else {
            document.getElementById('SpanTotal').innerHTML='0 &euro;';
	}
        panier.affiche();
    }

    // Méthode pour tester une configuration particulière de PackcategoryID, renvoie false ou le PackID correspondant
    this.testConfig=function(PackcategoryID,TypeProduit,Ski,Chaussure,Casque) {
	for (iProd=0;iProd<this.tabProd.length;iProd++) {
            if ((this.tabProd[iProd].PackcategoryID==PackcategoryID)&&(this.tabProd[iProd].Ski==Ski)&&(this.tabProd[iProd].Chaussure==Chaussure)&&(this.tabProd[iProd].Casque==Casque)) {
                if ((TypeProduit=='ski')&&(this.tabProd[iProd].TexteSki!='')) {
                    return this.tabProd[iProd].PackID;
		} else if ((TypeProduit=='surf')&&(this.tabProd[iProd].TexteSurf!='')) {
                    return this.tabProd[iProd].PackID;
                }
            }
	}
	return false;
    }

    this.suppTout=function () {
        this.NbPers=0;
	this.Skieurs=new Array();
	document.getElementById('DivSkiset').innerHTML=requestSelect('/reservation/ajax/panier.php?action=modif_materiel&chp=NbPers&chpvalue=0&recupEtape1=1');
	panier.affiche();
    }

    this.suppSkieur=function (iPers) {
        this.Skieurs.splice(iPers,1);
        this.NbPers--;
        var objAdetruire=document.getElementById('Prenom'+iPers).parentNode.parentNode;
        objAdetruire.parentNode.removeChild(objAdetruire);
        requestUpdate('/reservation/ajax/panier.php?action=supp_skieur&iPers='+iPers,'',false);
        if (this.NbPers==0) {
            this.etape1();
        } else {
            panier.affiche();
        }
    }
}

// Objet MaterielProduit
function MaterielProduit () {
	this.PackcategoryID=0;
	this.Packcategory='';
	this.TypeProduit='';
	this.PackID=0;
	this.PrixPublic=0;
	this.Prix=0;
	this.Ski=false;
	this.Chaussure=false;
	this.Casque=false;
	this.AgeMin=0;
	this.AgeMax=0;
	this.Img='';
	this.ImgChaussure='';
	this.Texte='';
}

function Skieur(Prenom,Age,PackID,PackcategoryID,Packcategory,TypeProduit,Ski,Chaussure,Casque,TarifPublic,Tarif,Taille,Poids,Pointure) {
    this.Prenom=Prenom;
    this.Age=Age;
    this.PackID=PackID;
    this.PackcategoryID=PackcategoryID;
    this.Packcategory=Packcategory;
    this.TypeProduit=TypeProduit;
    this.Ski=Ski;
    this.Chaussure=Chaussure;
    this.Casque=Casque;
    this.TarifPublic=TarifPublic;
    this.Tarif=Tarif;
    this.Taille=Taille;
    this.Poids=Poids;
    this.Pointure=Pointure;

    // Affichage du menu déroulant des formules
    this.afficheFormule=function() {
	var objFormule=document.getElementById('Formule'+this.iPers);
	var iFormule;
	// Destruction des valeurs courantes
	for (iFormule=(objFormule.options.length-1);iFormule>=0;iFormule--) {
		objFormule.options[iFormule]=null;
	}
	// Re-création du menu déroulant
	var PackcategoryID=0;
	var TypeProduit='';
	var tabProd=new Array();
	tabProd[0]='ski';
	tabProd[1]='surf';
	var tabTexte=new Array();
	tabTexte[0]=strSkis;
	tabTexte[1]=strSnowboard;
	objFormule.options[0]=new Option(strChoisissezVotreFormule,'');
	var trouve=false;
	var iProd=0;
	for (iProd=0;iProd<tabProd.length;iProd++) {
            TypeProduit=tabProd[iProd];
            var size=objFormule.options.length;
            objFormule.options[size]=new Option(tabTexte[iProd],'');
            objFormule.options[size].style.backgroundColor=couleur_important;
            objFormule.options[size].style.color='white';
            objFormule.options[size].style.align='center';
            var iCat=0;
            for (iCat=0;iCat<panier.Materiel.tabProd.length;iCat++) {
            	if ((panier.Materiel.tabProd[iCat].PackcategoryID!=PackcategoryID)&&(panier.Materiel.tabProd[iCat].TypeProduit==TypeProduit)) {
                    PackcategoryID=panier.Materiel.tabProd[iCat].PackcategoryID;
                    if ((this.Age>=panier.Materiel.tabProd[iCat].AgeMin)&&((this.Age<=panier.Materiel.tabProd[iCat].AgeMax)||(panier.Materiel.tabProd[iCat].AgeMax==0))) {
            		var size=objFormule.options.length;
            		objFormule.options[size]=new Option(' - '+panier.Materiel.tabProd[iCat].Packcategory,PackcategoryID+'|'+TypeProduit);
            		if (this.PackcategoryID!=0) {
                            if ((PackcategoryID==this.PackcategoryID)&&(TypeProduit==this.TypeProduit)) {
                                objFormule.selectedIndex=size;
            			trouve=true;
                            }
            		}
                    }
            	}
            }
	}
        if (!trouve) {
            this.PackID=0;
            this.PackcategoryID=0;
            this.Packcategory='';
            this.TarifPublic=0;
            this.Tarif=0;
            document.getElementById('Span'+this.iPers).innerHTML=this.Tarif+' &euro;';
            document.getElementById('SpanPublic'+this.iPers).innerHTML='';
            document.getElementById('Pourcent'+this.iPers).innerHTML='';
            document.getElementById('Texte'+this.iPers).innerHTML='';
            requestUpdate('/reservation/ajax/panier.php?action=modif_skieur&iPers='+this.iPers+'&chp=PackID|PackcategoryID|Packcategory|TarifPublic|Tarif&chpvalue=0|0||0|0','',false);
        }
    }

    // Modification de l'âge de la personne
    this.changeAge=function(value) {
        this.Age=parseInt(value);
	this.afficheFormule();
        requestUpdate('/reservation/ajax/panier.php?action=modif_skieur&iPers='+this.iPers+'&chp=Age&chpvalue='+value,'',false);
    }

    // Modification de la catégorie, attend la variable PackcategoryID|TypeProduit
    this.changeCategory=function(value) {
        var tab,trouve,iCat;
        tab=explode('|',value);
	this.PackcategoryID=parseInt(tab[0]);
        this.TypeProduit=tab[1];
	trouve=false;
	iCat=0;
        // Recherche du produit dans panier.Materiel.tabProd
	while ((!trouve)&&(iCat<panier.Materiel.tabProd.length)) {
            if ((panier.Materiel.tabProd[iCat].PackcategoryID==this.PackcategoryID)&&(panier.Materiel.tabProd[iCat].TypeProduit==this.TypeProduit)) {
                // Si le PackcategoryID et le TypeProduit sont les mêmes
                if ((this.Ski==true)||(this.Chaussure==true)||(this.Casque==true)) {
                    // Si on a sélectionné les skis, les chaussures ou le casque
                    // on vérifie si le produit parcouru correspond à la même configuration
                    if ((this.Ski==panier.Materiel.tabProd[iCat].Ski)&&(this.Chaussure==panier.Materiel.tabProd[iCat].Chaussure)&&(this.Casque==panier.Materiel.tabProd[iCat].Casque)) {
                        trouve=true;
                    } else {
                        iCat++;
                    }
                } else {
                    // Si on n'a encore rien sélectionné, on configure le skieur avec le produit parcouru
                    trouve=true;
                    this.TypeProduit=panier.Materiel.tabProd[iCat].TypeProduit;
                    this.Ski=panier.Materiel.tabProd[iCat].Ski;
                    this.Chaussure=panier.Materiel.tabProd[iCat].Chaussure;
                    this.Casque=panier.Materiel.tabProd[iCat].Casque;
                }
            } else {
                iCat++;
            }
	}
	if (trouve) {
            this.Packcategory=panier.Materiel.tabProd[iCat].Packcategory;
            this.PackID=panier.Materiel.tabProd[iCat].PackID;
            this.TarifPublic=panier.Materiel.tabProd[iCat].PrixPublic;
            this.Tarif=panier.Materiel.tabProd[iCat].Prix;
            // Affichage des prix
            if (this.TarifPublic>this.Tarif) {
                document.getElementById('SpanPublic'+this.iPers).innerHTML=this.TarifPublic+' &euro;';
		document.getElementById('SpanPublic'+this.iPers).style.background="url(\'/images/pxbarre.png\') no-repeat center center";
		var pourcent=round((1-(this.Tarif/this.TarifPublic))*100,2);
                if (round(Math.abs(round(pourcent,2)-round(pourcent)),2)<=0.01) {
                    pourcent=round(pourcent);
                }
		document.getElementById('Pourcent'+this.iPers).innerHTML='<img src="/images/promo/'+pourcent+'.png" alt="'+pourcent+'"/>';
            } else {
                document.getElementById('SpanPublic'+this.iPers).innerHTML="";
                document.getElementById('SpanPublic'+this.iPers).style.background="";
                document.getElementById('Pourcent'+this.iPers).innerHTML='';
            }
            document.getElementById('Span'+this.iPers).innerHTML=panier.showDecimals(this.Tarif)+' &euro;';
            // Image et texte du matériel
            document.getElementById('Texte'+this.iPers).innerHTML='';
            // Coche des skis, chaussures et casque
            if (document.getElementById('Ski'+this.iPers)) {
                if (this.Ski) {
                    document.getElementById('Ski'+this.iPers).checked=true;
                    document.getElementById('Texte'+this.iPers).innerHTML+='<div style="position:absolute;z-index:10;"><img src="'+panier.Materiel.tabProd[iCat].Img+'" alt=""/></div>';
		} else {
                    document.getElementById('Ski'+this.iPers).checked=false;
		}
		if (this.TypeProduit=='Ski') {
                    document.getElementById('SkiTexte'+this.iPers).innerHTML=strSkis;
		} else if (this.TypeProduit=='Surf') {
                    document.getElementById('SkiTexte'+this.iPers).innerHTML=strSnowboard;
		}
            }
            if (document.getElementById('Chaussure'+this.iPers)) {
		if (this.Chaussure) {
                    document.getElementById('Chaussure'+this.iPers).checked=true;
                    document.getElementById('Texte'+this.iPers).innerHTML+='<div style="position:absolute;z-index:11;"><img src="'+panier.Materiel.tabProd[iCat].ImgChaussure+'" alt="'+strChaussures+'"/></div>';
		} else {
                    document.getElementById('Chaussure'+this.iPers).checked=false;
		}
            }
            if (document.getElementById('Casque'+this.iPers)) {
                if (this.Casque) {
                    document.getElementById('Casque'+this.iPers).checked=true;
                    document.getElementById('Texte'+this.iPers).innerHTML+='<div style="position:absolute;z-index:11;"><img src="/skiset/produits/casque.png" alt="'+strCasque+'"/></div>';
		} else {
                    document.getElementById('Casque'+this.iPers).checked=false;
                }
            }
            document.getElementById('Texte'+this.iPers).innerHTML+='<div><img src="/skiset/produits/masque.png" alt=""/></div><br/><div style="text-align:center"><a href="javascript:ouvrir(\'/presta/afficheDesc.php?url=skiset\',\''+strMaterielSki+'\')" ><img src="/images/details.png" alt="'+strDetails+'"></a> '+panier.Materiel.tabProd[iCat].Texte+'</div>';
            // Recherche si le casque est possible
            var casquePossible=false;
            iCat=0;
            while ((!casquePossible)&&(iCat<panier.Materiel.tabProd.length)) {
                if ((panier.Materiel.tabProd[iCat].PackcategoryID==this.PackcategoryID)&&(panier.Materiel.tabProd[iCat].Casque)) {
                    casquePossible=true;
                }
		iCat++;
            }
            if (casquePossible) {
                document.getElementById('CasqueCheck'+this.iPers).style.visibility='visible';
            } else {
                document.getElementById('CasqueCheck'+this.iPers).style.visibility='hidden';
            }
	} else {
            // Réinitialisation des valeurs et affichages
            this.PackID=0;
            this.TarifPublic=0;
            this.Tarif=0;
            this.Casque=false;
            document.getElementById('Formule'+this.iPers).selectedIndex=0;
            document.getElementById('Casque'+this.iPers).checked=false;
            document.getElementById('SkiTexte'+this.iPers).innerHTML='';
            document.getElementById('CasqueCheck'+this.iPers).style.visibility='hidden';
            document.getElementById('SpanPublic'+this.iPers).innerHTML="";
            document.getElementById('SpanPublic'+this.iPers).style.background="";
            document.getElementById('Pourcent'+this.iPers).innerHTML='';
            document.getElementById('Span'+this.iPers).innerHTML='0 &euro;';
            document.getElementById('Texte'+this.iPers).innerHTML='';
    	}
	panier.Materiel.calculTotal();
        var url='/reservation/ajax/panier.php?action=modif_skieur&iPers='+this.iPers;
        var chp='&chp=';
        var chpvalue='&chpvalue=';
        chp+='PackID|Packcategory|PackcategoryID|TypeProduit|Ski|Chaussure|Casque|TarifPublic|Tarif';
        chpvalue+=this.PackID+'|'+escape(this.Packcategory)+'|'+this.PackcategoryID+'|'+this.TypeProduit;
        chpvalue+=this.Ski===true ? '|true' : '|false';
        chpvalue+=this.Chaussure===true ? '|true' : '|false';
        chpvalue+=this.Casque===true ? '|true' : '|false';
        chpvalue+='|'+this.TarifPublic+'|'+this.Tarif;
        requestUpdate(url+chp+chpvalue,'',false);
    }

    // Modification de ski, chaussure, casque ou type de produit
    this.changeOption=function (quoi,value) {
        var PackID;
        if (quoi=='Ski') {
            PackID=panier.Materiel.testConfig(this.PackcategoryID,this.TypeProduit,value,this.Chaussure,this.Casque);
            if (PackID===false) {
                if (value===true) {
                    document.getElementById('Ski'+this.iPers).checked=false;
                    document.getElementById('Taille'+this.iPers).style.visibility='hidden';
                    document.getElementById('Poids'+this.iPers).style.visibility='hidden';
		} else {
                    document.getElementById('Ski'+this.iPers).checked=true;
                    document.getElementById('Taille'+this.iPers).style.visibility='visible';
                    document.getElementById('Poids'+this.iPers).style.visibility='visible';
		}
            } else {
                this.Ski=value;
		document.getElementById('Ski'+this.iPers).checked=value;
		if (value) {
                    document.getElementById('Taille'+this.iPers).style.visibility='visible';
                    document.getElementById('Poids'+this.iPers).style.visibility='visible';
		} else {
                    document.getElementById('Taille'+this.iPers).style.visibility='hidden';
                    document.getElementById('Poids'+this.iPers).style.visibility='hidden';
		}
		this.changeCategory(this.PackcategoryID+'|'+this.TypeProduit);
            }
	} else if (quoi=='Chaussure') {
            PackID=panier.Materiel.testConfig(this.PackcategoryID,this.TypeProduit,this.Ski,value,this.Casque);
            if (PackID===false) {
                if (value===true) {
                    document.getElementById('Chaussure'+this.iPers).checked=false;
                    document.getElementById('Pointure'+this.iPers).style.visibility='hidden';
		} else {
                    document.getElementById('Chaussure'+this.iPers).checked=true;
                    document.getElementById('Pointure'+this.iPers).style.visibility='visible';
		}
            } else {
                this.Chaussure=value;
		document.getElementById('Chaussure'+this.iPers).checked=value;
		if (value) {
                    document.getElementById('Pointure'+this.iPers).style.visibility='visible';
		} else {
                    document.getElementById('Pointure'+this.iPers).style.visibility='hidden';
		}
		this.changeCategory(this.PackcategoryID+'|'+this.TypeProduit);
            }
	} else if (quoi=='Casque') {
            PackID=panier.Materiel.testConfig(this.PackcategoryID,this.TypeProduit,this.Ski,this.Chaussure,value);
            if (PackID===false) {
                if (value===true) {
                    document.getElementById('Casque'+this.iPers).checked=false;
		} else {
                    document.getElementById('Casque'+this.iPers).checked=true;
		}
            } else {
                this.Casque=value;
		document.getElementById('Casque'+this.iPers).checked=value;
		this.changeCategory(this.PackcategoryID+'|'+this.TypeProduit);
            }
	}
    }

    this.controlChp=function (id,mode) {
	var objChp=document.getElementById(id);
	id=' '+id;
	if (id.indexOf('Prenom')>0) {
            strFocus='';
            strBlur=strPrenom;
	} else if (id.indexOf('Taille')>0) {
            strFocus=' cm';
            strBlur=strTaille;
	} else if (id.indexOf('Poids')>0) {
            strFocus=' kg';
            strBlur=strPoids;
	} else if (' '+id.indexOf('Pointure')>0) {
            strFocus='';
            strBlur=strPointure;
	}
	if (mode=='blur') {
            value=' '+objChp.value;
            if (objChp.value=='') {
                objChp.value=strBlur;
                if (id.indexOf('Prenom')>0) {
                    this.Prenom='';
		} else if (id.indexOf('Taille')>0) {
                    this.Taille='';
		} else if (id.indexOf('Poids')>0) {
                    this.Poids='';
		} else if (id.indexOf('Pointure')>0) {
                    this.Pointure='';
		}
            } else  {
                var url='/reservation/ajax/panier.php?action=modif_skieur&iPers='+this.iPers+'&chp=';
                if (value.indexOf(strFocus)<0) {
                    objChp.value+=strFocus;
		}
		// Remplacement de la virgule (utilisée pour le cookie) par un point
		while (objChp.value.indexOf(',')>0) {
                    objChp.value=objChp.value.replace(',','.');
		}
		if (id.indexOf('Prenom')>0) {
                    url+='Prenom';
                    this.Prenom=objChp.value;
		} else if (id.indexOf('Taille')>0) {
                    url+='Taille';
                    this.Taille=objChp.value;
		} else if (id.indexOf('Poids')>0) {
                    url+='Poids';
                    this.Poids=objChp.value;
		} else if (id.indexOf('Pointure')>0) {
                    url+='Pointure';
                    this.Pointure=objChp.value;
		}
                url+='&chpvalue='+escape(objChp.value);
                requestUpdate(url,'',false);
            }
	} else if (mode=='focus') {
            if (objChp.value==strBlur) {
                objChp.value='';
            }
	}
    }
}

var fenetre=null;
function Resort (ResortID,Resort,Map) {
    this.ResortID=ResortID;
    this.Resort=Resort;
    this.Map=Map;
    this.ouvrirPlan=function() {
	if (fenetre!=null) {
            fenetre.close();
	}
	if (this.Map!='') {
            if (screen.width>800) {
                scrollbar=',scrollbars=no';
            } else {
                scrollbar=',scrollbars=yes';
            }
            fenetre=window.open('/affichePhoto.php?url='+this.Map,'','resizable=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=yes,left=10,top=10'+scrollbar);
	}
    }
}
// ----------------------------------------- ONGLETS -------------------------------------------------

function initOnglet() {
    var tab=document.getElementsByTagName('DIV');
    for (var i=0;i<tab.length;i++) {
        if (tab[i].className=='OngletContenuInactif') {
            tab[i].contenu=tab[i].innerHTML;
            tab[i].innerHTML='';
        }
    }
}
function afficheOnglet(id) {
    var tab=document.getElementsByTagName('DIV');
    for (var i=0;i<tab.length;i++) {
        if (tab[i].className=='OngletActif') {
            tab[i].className='OngletInactif';
        } else if (tab[i].className=='OngletContenuActif') {
            tab[i].className='OngletContenuInactif';
            tab[i].contenu=tab[i].innerHTML;
            tab[i].innerHTML='';
        }
    }
    document.getElementById('TitreOnglet'+id).className='OngletActif';
    document.getElementById('Onglet'+id).className='OngletContenuActif';
    document.getElementById('Onglet'+id).innerHTML=document.getElementById('Onglet'+id).contenu;
    panier.majOnglets();
    requestSelect('/reservation/ajax/panier.php?action=onglet&id='+id);
}



function initFollowScrollPanier() {
	if (document.getElementById('DivPanier')) {
		var obj=document.getElementById('DivPanier');
		obj=obj.parentNode;
		obj.y=obj.offsetTop;
		addEvent(window,'scroll',followScrollPanier);
	}
}

function followScrollPanier(e) {
	var html=document.getElementsByTagName('HTML')[0];
	var obj=document.getElementById('DivPanier');
	obj=obj.parentNode;
	if (html.scrollTop>obj.y) {
		obj.style.top=(html.scrollTop-obj.y+5)+'px';
	} else {
		obj.style.top='0px';
	}
}

addEvent(window,'load',initFollowScrollPanier);