/* Vérifie si les champs du formulaire sont bien remplis */
(function($) {

	$.fn.clearCheckForm = function() {
		var $this = $(this);

		/* Patterns pour la vérification des types de champs */
		var mailPattern = new RegExp(/^(.+)@([^\(\);:,<>]+\.[a-zA-Z]{2,4})/);
		var minLengthPattern = new RegExp(/required\[([0-9]*)\]/);
		var numericPattern = new RegExp(/^([0-9]*)$/);

		var minLength;
		var errorTxt = new Array();
		var htmlError = '<span class="error_form"></span>'; // html du code de l'erreur

		// Ajoute les styles d'erreur sur le champ parcouru
		function addErrorStyle($elem,classError,htmlError) {
			if (!$elem.next(classError).length) {
				$elem.after(htmlError).closest('p').addClass('error_field');
			}
		}
		$this.submit(function() {

			$this.find('.errorRadio').each(function() {
				$(':radio').each(function() {
				    if ($(this).parent('.errorRadio').length) {
				        $(this).unwrap();
				    }
				})

				$(this).replaceWith($(this).html()); // on retire les span eventuels autour des boutons radio
			});
			var error = 0; // total d'erreur au lancement du submit

			// on parcoure l'ensemble des champs requis
			$(':input[class*=required]').each(function(i,item) {
				var e = 0 // variable d'incrémentation pour les messages d'erreurs
				errorTxt[i] = new Array(); // on créé une array de messages d'erreurs

				// cas des boutons radio
				if ($(this).is(':radio') && !$(this).parent('span').length) {
					var attrName = $(this).attr('name'); // récupère le name du champs

					// on vérifie pour les champs ayant le même champs name si un des boutons radio est bien selectionné
					if ($this.find(':radio[name='+attrName+']').is(':checked') == false) {
						$this.find(':radio[name='+attrName+']').wrap('<span class="errorRadio"></span>').closest('p').addClass('error_field'); // on ajoute un style pour les erreurs
						errorTxt[i][e] = ''; // pseudo-message d'erreur
						e++;  // incrémentation du nombre de messages d'erreur
					}
				} else {
					minLength = $(this).attr('class').match(minLengthPattern); // nombre minimum de caractère requis
					value = $(this).val(); // value du champs parcouru

					// si la valeur est vide
					if (value == '') {
						addErrorStyle($(this),'.error_form',htmlError); // on ajoute un style pour les erreurs s'il n'est pas déjà présent
						errorTxt[i][e] = 'Vous devez préciser votre '+$(this).prev('label').text().replace('*','').toLowerCase();
						e++;
						$(this).closest('p').addClass('error_field');
					}

					// si le nombre minimum de caractère requis n'est pas atteint
					else if (minLength && value.length < minLength[1]) {
						addErrorStyle($(this),'.error_form',htmlError); // on ajoute un style pour les erreurs s'il n'est pas déjà présent
						// ajout du message d'erreur
						errorTxt[i][e] = 'Ce champs requiert '+minLength[1]+' caractère' + (minLength[1] > 1 ? 's' : '') + ' minimum';
						e++; // incrémentation du nombre de messages d'erreur
					}

					// si le champs numérique n'est pas valide
					if ($(this).hasClass('numeric') && !value.match(numericPattern)) {
						addErrorStyle($(this),'.error_form',htmlError); // on ajoute un style pour les erreurs s'il n'est pas déjà présent
						// ajout du message d'erreur
						errorTxt[i][e] = 'Ce champs n\'accepte que les caractères numériques';
						e++; // incrémentation du nombre de messages d'erreur
					}

					// si le champs email n'est pas une adresse email valide
					if ($(this).hasClass('email') && !value.match(mailPattern)) {
						addErrorStyle($(this),'.error_form',htmlError); // on ajoute un style pour les erreurs s'il n'est pas déjà présent
						// ajout du message d'erreur
						errorTxt[i][e] = 'Cette adresse email n\'est pas correcte';
						e++; // incrémentation du nombre de messages d'erreur
					}

					// on affiche les messages d'erreur associés au champs parcouru
					$(this).next('.error_form').html(errorTxt[i].join("<br />"));
				}

				// si le nombre de messages d'erreurs est supérieur à Zero, on incrémente le total d'erreur
				if (errorTxt[i].length > 0) {
					error++;
				}
			});

			if (error > 0) {
				if (error == 1) {
					alert(error+' champs requis n\'a pas été renseigné'); // on affiche une alerte comprenant le nombre d'erreur sur le formulaire
				} else {
					alert(error+' champs requis n\'ont pas été renseignés'); // on affiche une alerte comprenant le nombre d'erreur sur le formulaire
				}

				return false; // on empèche le formulaire d'être soumis
			}
		});

		$this.find(':input').focus(function() {
			$(this).next('.error_form').remove();
			if ($(this).is(':radio')) {
				var attrName = $(this).attr('name');
				if ($(this).parent('.errorRadio').length) {
					$(':radio[name='+attrName+']').unwrap();
				}
				$(this).attr('checked','checked');
				$(':radio[name='+attrName+']').closest('p').removeClass('error_field');

			} else {
				$(this).closest('p').removeClass('error_field');
			}

		});

	}
})(jQuery);

var placement = {
  a: [1,2,3,4,5,6,9,10,11,12],
  b: [1,2,3,4,5,6,7,8,11,12],
  c: [3,4,5,6,7,8,9,10],
  d: [1,2,4,5,6,7,8,9],
  e: [1,2,3,4,5,6,9,10,11,12,13,14],
  g: [1,2,3,4,5,6,7,8],
  h: [1,2,3,4,5,6,7,8,11,12],
  j: [1,2,3,4,5,6,7,8,9,10],
  k: [1,2,3,4,7,8,9,10],
  l: [1,2,3,4,5,6,9,10,11,12,13,14,15,16,17,18],
  n: [3,4,5,6,9,10,11,12,13,14,15,16],
  r: [1,2,3,4,5,6,9,10,11,12,13,14,15],
  s: [1,2,3,4,5,6,7,8,12,13,14,15,16,17,18],
  t: [1,2,3,5,6,7,9,10,11],
  u: [1,2,3,4,5,6,7,8,9,11,12,13,14,15,17,18,19,20,21,22],
  x: [2,3,4,5,8,9,10,11,12,13,14,15],
  y: [1,2,3,4,5,6,7,8,9,10,13,14,15,16],
  z: [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
};




function formInit() {

  function generateOptions(letter) {
    $('#placement_num_field').remove();
    htmlSelect = '';
    
    if(!$('label[for=placement_num_field]').length) {
      labelInsert = '<label style="display:none" for="placement_num_field">Numéro de placement</label>';
      $(labelInsert).insertAfter('#placement_field');
    }
    
    htmlSelect += '<select class="required" id="placement_num_field" name="placement_num">';
    htmlSelect += '<option value=""></option>';
    $(placement[letter]).each(function(i,item) {
      if (i == 0) {
        htmlSelect += '<option value="'+this+'" selected="selected">'+this+'</option>';
      } else {
        htmlSelect += '<option value="'+this+'">'+this+'</option>';
      }
    })
    htmlSelect += '</select>';
    $(htmlSelect).insertAfter('label[for=placement_num_field]');
  }

  generateOptions('a');

  var $selectZone = $('select#type_placement_field');
  var $toggleField = $('label[for=placement_field]').parent('p');
 
  function resetField() {
    $toggleField.find('.required').removeClass('required');
    $toggleField.find('select option:selected').removeAttr('selected');
    $toggleField.find('select option:first').attr('selected','selected');
    $toggleField.hide();
  }
  
  function reactivateField() {
    generateOptions('a');
    $toggleField.find('select').eq(0).addClass('required');
    $toggleField.find('select option:first').removeAttr('selected');
    $toggleField.find('select option').eq(1).attr('selected','selected');
  }
  
  if($selectZone.val() != 'place_assise') {
    resetField();
  } else {
    reactivateField();
  }
  
  $selectZone.change(function() {
    if($(this).val() == 'place_assise') {
      reactivateField();
      $toggleField.show();
    } else {
      resetField();
    }
  });
  
  $('#placement_field').change(function() {
    var letterSelected = $(this).find('option:selected').val();
    if (letterSelected != '') {
      generateOptions(letterSelected);
    }
  });
  
}


$(document).ready(function() {
  $('#register').clearCheckForm();
  
  if (typeof(jQuery.fn.flowplayer)!="undefined") {
    $("a[href*=.flv]").flowplayer("swf/flowplayer.swf",{ 
             
        // clip does not start automatically 
        clip: { 
            autoPlay: true 
        }, 
         
        // default controls with the same background color as the page background 
        plugins:  {   
            controls:  { 
                backgroundColor: '#000', 
                backgroundGradient:'medium',
                scrubber: true, 
                height: 30,
                timeColor: '#cccccc',
                volumeSliderColor: '#C83030',
                sliderColor: '#C83030', 
                progressColor: '#ca000a', 
                bufferColor: '#7d0d0d',
                buttonColor: '#C83030'
            } 
        }, 
         
        // fiercy red background color with a little gradient and curving 
        canvas: { 
            backgroundColor: '#ca000a', 
            backgroundGradient: [0.3, 0], 
            borderRadius: 0 
        }, 
         
        // set screen dimensions so that it goes near the canvas borders 
        screen: { 
            width: 450, 
            height: 303,  
            top: 0 
        } 
         
    });
    $f(0).play();
  }
  
  formInit();
  
  Cufon.replace('h1,#header ul li a,#menu a,h2',{
      hover: true
  });
});