
//----------------------------------------------------------------------
var _display_ppps_product = false;
function initForm(){
	$('ppps_paybox').addEvent('submit', function(e) {
			if(e && e.stop){ e.stop(); }
			var res = $('ppps_confirm').empty().addClass('ajax-loading'); 
			res.setStyle('display','block');
			$('ppps_paybox').set('send', {
					onRequest:function(){
						$('ppps_paybox').setStyle('display','none');
						res.set('html', 'merci de patienter ...');
						$('bsi_product').setStyle('display','none'); // masque le product 
						$('bsi_links').setStyle('display','none'); // masque le bsi_links 
						$('bsi_wait').setStyle('display','block'); // affiche le waiter
						$('ppps_product').setStyle('display','none'); // affiche le résultat direct plus
					},
					onComplete: function(response) {
						response = JSON.decode(response); 
						res.removeClass('ajax-loading');
						res.setStyle('display','none');
						if(response.idplus_id&&response.idplus_id!==null){ //>0||response.idplus_id!=''){
							$('bsi_product').set('html', response.idplus_html); 
							_display_ppps_product = true;
							$('ppps_product').set('html', $('ppps_product').get('html')+'\n<br>'+response.links);
							initForm();
							$('bsi_confirmation').setStyle('display','block'); // affiche la confirmation 
							$('ppps_product').setStyle('display','block'); // affiche le résultat direct plus
							$('bsi_product').setStyle('display','block');  // affiche le nouveau produit
							$('bsi_links').setStyle('display','block');   // réaffiche les liens de validation... 
						}else{ // fin de la loop
							$('bsi_confirmation').setStyle('display','none'); // affiche la confirmation   
							$('ppps_product').setStyle('display','none'); // affiche le résultat direct plus
							$('bsi_links').setStyle('display','none');   // réaffiche les liens de validation... 
							$('bsi_product').setStyle('display','none');  // affiche le nouveau produit 
							$('bsi_ok').setStyle('display','block');   // affiche la liste des liens ...
							_display_ppps_product = true;
							$('ppps_product').set('html', $('ppps_product').get('html')+'\n<br>'+response.links);
							$('ppps_product').setStyle('display','block'); // affiche le résultat direct plus
						}
						$('bsi_wait').setStyle('display','none'); // affiche le waiter
					}
				}); 
			$('ppps_paybox').send();
		}); 
}

//----------------------------------------------------------------------
window.addEvent('domready',function(){  
		//----------------------------------------------------------------------
		if($('theform')){
			MooTools.lang.set('fr-FR', 'Form.Validator', {
					required:'<span>Obligatoire.</span>',
					minLength:'<span>Veuillez saisir un minimum de {minLength} caract&egrave;re(s) (vous avez saisi {length} caract&egrave;re(s)).</span>',
					maxLength:'<span>Veuillez saisir un maximum de {maxLength} caract&egrave;re(s) (vous avez saisi {length} caract&egrave;re(s)).</span>',
					integer:'<span>Veuillez saisir un nombre entier dans ce champ. Les nombres d&eacute;cimaux (ex : "1,25") ne sont pas autoris&eacute;s.</span>',
					numeric:'<span>Veuillez saisir uniquement des chiffres dans ce champ (ex : "1" ou "1,1" ou "-1" ou "-1,1").</span>',
					digits:'<span>Veuillez saisir uniquement des chiffres et des signes de ponctuation dans ce champ (ex : un num&eacute;ro de t&eacute;l&eacute;phone avec des traits d\'union est autoris&eacute;).</span>',
					alpha:'<span>Veuillez saisir uniquement des lettres (a-z) dans ce champ. Les espaces ou autres caract&egrave;res ne sont pas autoris&eacute;s.</span>',
					alphanum:'<span>Veuillez saisir uniquement des lettres (a-z) ou des chiffres (0-9) dans ce champ. Les espaces ou autres caract&egrave;res ne sont pas autoris&eacute;s.</span>',
					dateSuchAs:'<span>Veuillez saisir une date correcte comme {date}</span>',
					dateInFormatMDY:'<span>Veuillez saisir une date correcte, au format JJ/MM/AAAA (ex : "31/11/1999").</span>',
					email:'<span>Incorrect</span>',
					url:'<span>Veuillez saisir une URL, comme http://www.google.com.</span>',
					currencyDollar:'<span>Veuillez saisir une quantit&eacute; correcte. Par example 100,00&euro;.</span>',
					oneRequired:'<span>Obligatoire.</span>',
					errorPrefix: '<img src="./js/messages/cross.png" />',
					warningPrefix: '<img src="./js/messages/cross.png" />',
					//Form.Validator.Extras
					noSpace: '<span>Ce champ n\'accepte pas les espaces.</span>',
					reqChkByNode: '<span>Aucun &eacute;l&eacute;ment n\'est s&eacute;lectionn&eacute;.</span>',
					requiredChk: '<span>Ce champ est obligatoire.</span>',
					reqChkByName: '<span>Veuillez s&eacute;lectionner un(e) {label}.</span>',
					match: '<span>Ce champ doit correspondre avec le champ {matchName}.</span>',
					startDate: '<span>date de d&eacute;but</span>',
					endDate: '<span>date de fin</span>',
					currendDate: '<span>date actuelle</span>',
					afterDate: '<span>La date doit &ecirc;tre identique ou post&eacute;rieure &agrave; {label}.</span>',
					beforeDate: '<span>La date doit &ecirc;tre identique ou ant&eacute;rieure &agrave; {label}.</span>',
					startMonth: '<span>Veuillez s&eacute;lectionner un mois de d&eacute;but.</span>',
					sameMonth: '<span>Ces deux dates doivent &ecirc;tre dans le m&ecirc;me mois - vous devez en modifier une.</span>'
				});
			MooTools.lang.setLanguage('fr-FR');
			//----------------------------------------------------------------------
			Form.Validator.Inline.implement({	  
					initialize: function(form, options){
						this.parent(form, options);
						this.addEvent('onElementValidate', function(isValid, field, className, warn){ 
								var validator = this.getValidator(className);
								//---------------------------------------
								var advice = this.makeAdvice(className, field, validator.getError(field), warn);
								this.insertAdvice(advice, field);
								//---------------------------------------
								if (!isValid && validator.getError(field)){ 
									if (warn) field.addClass('warning');
									this.showAdvice(className, field);
								} else { 
									field.store(this.getPropName(className),true);// mk
									this.hideAdvice(className, field);
								} 
							});
					},
					
					
					makeAdvice: function(className, field, error, warn){
						var errorMsg = (warn)?this.warningPrefix:this.errorPrefix;
						errorMsg += (this.options.useTitles) ? field.title || error:error;
						var cssClass = (warn) ? 'warning-advice' : 'validation-advice';
						var advice = this.getAdvice(className, field);
						if(advice) {
							advice = advice.clone(true, true).set('html', errorMsg).replaces(advice);
						} else {
							advice = new Element('div', {
									html: errorMsg,
									styles: { display: 'none' }, 
									id: 'advice-' + className + '-' + this.getFieldId(field)
								}).addClass(cssClass);
						}
						field.store('advice-' + className, advice);
						return advice;
					},
					
					showAdvice: function(className, field){
						var advice = this.getAdvice(className, field);
						if (advice && !field.retrieve(this.getPropName(className))
								&& (advice.getStyle('display') == 'none'
									|| advice.getStyle('visibility') == 'hidden'
									|| advice.getStyle('opacity') == 0)){
							field.store(this.getPropName(className), true);
							
							advice.getElement('span').setStyle('visibility','visible');
							
							if (advice.reveal) advice.reveal();
							else advice.setStyle('display', 'block');
						}
					},
					
					hideAdvice: function(className, field){
						var advice = this.getAdvice(className, field);  
						if (advice && field.retrieve(this.getPropName(className))){
							field.store(this.getPropName(className), false);
							if(false){
								// if Fx.Reveal.js is present, transition the advice out
								if (advice.dissolve) advice.dissolve();
								else advice.setStyle('display', 'none');
							}else{ 
								//----------------------------------------------- 
								if (advice.reveal) advice.reveal();
								else advice.setStyle('display', 'block');
								//----------------------------------------------- 
								advice.getElement('span').setStyle('visibility','hidden'); 
								advice.getElement('img').set('src','./js/messages/tick.png');
								//-----------------------------------------------
							} 
						}
					}
				});
			//----------------------------------------------------------------------
			//add a validator for email confirmation
			Form.Validator.add('sameAsEmail', {
					errorMsg: '<span>Email different</span>',
					test: function(element){
						return ( element.value.length>0 && element.value==$('fclt_email').value );
					}
				});
			//add a validator for required-email
			Form.Validator.add('required-email', {
					errorMsg: Form.Validator.getMsg.pass('email'),
					test: function(element){
						return (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(element.get('value'));
					}
				});
			//add a validator for cp
			Form.Validator.add('validate-zipcode', {
					// errorMsg: '<span>Ce champ doit contenir votre code postal.</span>',
					errorMsg: '<span>Incorrect</span>',
					test: function(element){ 
						if(false){
							return (/^(([0-9]{5})|([0-9]{2} *[0-9]{3}))$/i).test(element.value);
						}else{
							return (/^[0-9a-zA-Z ]{2,}$/i).test(element.value);
						}
					}
				});		
			//add a validator for cp
			Form.Validator.add('validate-1900', { 
					errorMsg: '<span>Incorrect</span>',
					test: function(element){  
						return (element.getSelected().get('value')>1900); 
					}
				});	
			//----------------------------------------------------------------------		
			var myValidator = new Form.Validator.Inline($('theform'), {
					useTitles:true,
					serial:false,
					scrollToErrorsOnSubmit:false
				});		
		}
		//----------------------------------------------------------------------
		// Direct plus form.
		//---------------------------------------------------------------------- 
		// <div id="bsi_links">
		//   <a href="javascript:void(0);" id="bsi_buy">Acheter ce produit !!</a>
		//   <a href="javascript:void(0);" id="bsi_end">Non merci, montrez-moi les liens !!</a>
		// </div>
		// <div id="bsi_wait">
		//   Merci de patienter...
		// </div>
		// <div id="bsi_ok">
		//   Ok merci, ##prenom## <br>
		//   Voici votre id client : ##IDCLI## <br>
		//   ##EBOOK LINKS##
		//   <br>
		//   <div id="ppps_product">
		//     Voici les liens vers les produits supplémentaires: <br>
		//     <div id="ppps_confirm">
		//     </div>
		//   </div>
		// </div>
		//----------------------------------------------------------------------  
		if($('ppps_paybox')){  
			if($('formdiv')){ 
				$('formdiv').setStyle('display','none');
			}  
			if($('bsi_wait')){
				$('bsi_wait').setStyle('display','none');
			} 
			if($('ppps_product')){
				$('ppps_product').setStyle('display','none');
			} 
			if($('bsi_ok')){
				$('bsi_ok').setStyle('display','none');
			} 
			if($('bsi_buy')){
				$('bsi_buy').addEvent('click',function(e){
						$('ppps_paybox').fireEvent('submit'); // lance l'achat
						$('bsi_wait').setStyle('display','block'); // affiche le waiter
						$('bsi_product').setStyle('display','none'); // masque le product 
						$('bsi_links').setStyle('display','none'); // masque le bsi_links 
					});
			}
			if($('bsi_end')){
				$('bsi_end').addEvent('click',function(e){  
						if(_display_ppps_product){// affiche le résultat direct plus
							$('ppps_product').setStyle('display','block');  
						}else{
							$('ppps_product').setStyle('display','none');  
						}
						$('bsi_wait').setStyle('display','none'); // affiche le waiter 
						$('bsi_product').setStyle('display','none'); // masque le product 
						$('bsi_links').setStyle('display','none'); // masque le bsi_links 
						$('bsi_ok').setStyle('display','block'); // affiche a confirmation
					});
			}
			initForm();
		}
	});
