function arrondi($number, $precision)
{
   $dizaine = Math.pow(10,$precision);
   return Math.round($number * $dizaine) / $dizaine;
}


// validation de radio button
function valButton(btn) {
    var cnt = -1;
    for (var i=btn.length-1; i > -1; i--) {
        if (btn[i].checked) {cnt = i; i = -1;}
    }
    if (cnt > -1) return btn[cnt].value;
    else return null;
}

function getCheckedValue(radioObj) {
  if(!radioObj)
    return "";
  var radioLength = radioObj.length;
  if(radioLength == undefined)
    if(radioObj.checked)
      return radioObj.value;
    else
      return "";
  for(var i = 0; i < radioLength; i++) {
    if(radioObj[i].checked) {
      return radioObj[i].value;
    }
  }
  return "";
}

function checkRadio(radio)
{
  if(radio == undefined)
  {
    return true;
  }

  if( !valButton(radio))
  {
    alert('Tous les champs sont obligatoires');
    radio[0].focus();
    return false;
  }
  return true
}

/* Prend en paramètre une liste de checkboxes et inverse leur valeur ('checked' si 'unchecked', et vice-versa) */

function reverseCheck(checklist)
{
	var checks = document.getElementsByName(checklist);
	for (var i = 0 ; i < checks.length ; i++) 
	{
		checks[i].checked = !checks[i].checked ; 
	}
}

/* Prend en paramètre une liste de checkboxes et renvoie true si au moins une des checkboxes a été cochée */

function validateCheckBoxes(checkbox)
{
   var boxes = document.getElementsByName(checkbox) ; 
   oneChecked = false;
   for (i = 0 ; i < boxes.length ; i++)
   {
 		if (boxes[i].checked == true)
 		{
 			oneChecked = true ; 
 			break;
 		}
   }
   if (oneChecked == false)
   {
   		alert('Vous devez sélectionner au moins une case à cocher') ; 
   }
   return oneChecked ; 
}

//This function return a date object after accepting
//a date string and dateseparator as arguments

function getDateObject(dateString,dateSeparator)
{
  var curValue=dateString;
  var sepChar=dateSeparator;
  var curPos=0;
  var cDate,cMonth,cYear;

  //extract day portion
  curPos = dateString.indexOf(sepChar);
  cDate = dateString.substring(0,curPos);

  //extract month portion
  endPos=dateString.indexOf(sepChar,curPos+1);
  cMonth=dateString.substring(curPos+1,endPos);

  //extract year portion
  curPos=endPos;
  endPos=curPos+5;
  cYear=curValue.substring(curPos+1,endPos);

  //Create Date Object
  dtObject=new Date(cYear,cMonth-1,cDate);
  return dtObject;
}

function toggleDisplay(prefix, id)
{
	div = document.getElementById(prefix + id) ; 
	img = document.getElementById(prefix + 'plus_' + id) ; 
	if (div.style.display == 'none')
	{
		div.style.display = 'block' ; 
		img.src = '/images/minus.png' ;
	}
	else
	{
		div.style.display = 'none' ; 
		img.src = '/images/plus.png' ;
	}		 
}

function showPopup(event, module, id)
{
	if (event.ctrlKey == true)
	{
		new Ajax.Updater('popup_' + id, '/index.php/' + module + '/showPopup/id/' + id, {asynchronous:true, evalScripts:false, method:'get', onComplete:function(request, json){Element.show("popup_" + id)}});; return false;
	}
}

String.prototype.trim = function() {
	a = this.replace(/^\s+/, '');
	return a.replace(/\s+$/, '');
};

/* 
 * Méthode utilisée avec le widget "choix magasins Bouygues" lors personnalisation :
 * Décoche la liste des magasins si l'utilisateur choisit texte par défaut 
 */
function changedDefaultChoice()
{
  if($("cbx_default").checked)
  {
      $checkboxes = document.getElementsByName("magasin_ids[]");
      for (i = 0 ; i < $checkboxes.length ; i++)
      {
          $checkboxes[i].checked = false;
      }
  }
}

function changedMagasinIds()
{
	$checked = false;
	$checkboxes = document.getElementsByName("magasin_ids[]");
	for (i = 0 ; i < $checkboxes.length ; i++)
	{
	  if($checkboxes[i].checked)
	  {
		  $checked = true;
	  }
	}
	if($checked)
	{
		$("cbx_default").checked = false;
	}
}

/* 
 * Vérification cohérence des choix du widget "choix magasins Bouygues" pour Perso : 
 * l'utilisateur doit cocher "texte par défaut" ou au moins un magasin
 * */
function checkPersoChoice($suffix)
{
    $suffix = $suffix ? $suffix : '';
    // Si texte par défaut sélectionné : OK
    if($("cbx_default" + $suffix).checked)
    {
        return true;
    }
    // Sinon, on s'assure qu'au moins un magasin a été sélectionné
    else
    {
        return validateCheckBoxes('magasin_ids' + $suffix + '[]');
    }
}

/**
 * Méthode utilisée dans les formulaires où l'utilisateur doit sélectionner un interlocuteur magasin ou bien en saisir un nouveau
 * @param form
 * @returns {Boolean}
 */
function checkMagasinContact(form)
{
  if(form.magasin_contact_nom.value != '')
  {
	// Si saisie d'un nouvel interlocuteur, on annule une éventuelle sélection d'un interlocuteur existant
	form.magasin_contact_id.selectedIndex = 0;
	if(form.magasin_contact_prenom.value == '' || form.magasin_contact_tel.value == '' )
	{
		alert('Informations interlocuteur insuffisantes (téléphone et/ou prénom)');
		return false;
	}
	if(form.magasin_contact_civilite_id.selectedIndex == 0)
    {
		alert('Veuillez indiquer une civilité');
		return false;
    }
  }
  else
  {
	  if(form.magasin_contact_id.selectedIndex == 0)
	  {
		  alert('Veuillez sélectionner un interlocuteur ou en ajouter un nouveau');
		  return false;
	  }
  }
  return true;
}

function checkBonCommandeFormStep1()
{
	$pourcentsOk = checkBonCommandePourcentages();
	if(!$pourcentsOk)
	{
		return false;
	}
	$encartes = $('encartes').value;
	if($encartes == '' || isNaN($encartes) || $encartes < 1)
	{
		alert("Veuillez saisir le nombre de porteurs de carte (nombre entier supérieur à zéro)");
		return false;
	}
	$futureEnseigneId = $('future_enseigne_id').selectedIndex;
	$futureEnseignePeriodeId = $('future_enseigne_periode_id').selectedIndex;
	if(($futureEnseigneId > 0 && $futureEnseignePeriodeId == 0) || ($futureEnseignePeriodeId > 0 && $futureEnseigneId == 0))
    {
		alert("Si vous souhaitez signaler un changement d'enseigne, merci de sélectionner la nouvelle enseigne et l'opération à compter de laquelle s'applique le changement");
		return false;
    }
	$coutDistrib = $('cout_distrib').value;
  	if($coutDistrib == '' || parseFloat($coutDistrib) == 0)
	{
		alert("Veuillez saisir un coût de distribution aux 1000 strictement supérieur à zéro");
		return false;
	}
	return true;
}

function checkBonCommandePourcentages()
{
	$ca = $('ca').value;
	if(isNaN($ca) || $ca < 1)
    {
		alert("Veuillez saisir un nombre supérieur à zéro pour le chiffre d'affaires");
		return false;
    }
	$pub = $('pourcent_pub').value;
	if(isNaN($pub) || $pub < 1 || $pub > 100)
	{
		alert('Veuillez saisir comme pourcentage publicité un nombre compris entre 1 et 100');
		return false;
	}
	$sem1 = $('pourcent_sem1').value;
	if(isNaN($sem1) || $sem1 < 0 || $sem1 > 100)
	{
		alert('Veuillez saisir comme pourcentage 1er semestre un nombre compris entre 0 et 100');
		return false;
	}	
	return true;
}

function updateBonCommandeFields()
{
	$pourcentagesOk = checkBonCommandePourcentages();
	if(!$pourcentagesOk)
	{
		return;
	}
	$sem1 = $('pourcent_sem1').value;
	$('pourcent_sem2').value = 100 - $sem1;
	$montantPub = $('ca').value * $('pourcent_pub').value / 100 ;
	$montantPubSem1 = $montantPub * $sem1 / 100;
	$('montant_sem1').value = arrondi($montantPubSem1, 2);
	$montantPubSem2 = $montantPub * (100 - $sem1) / 100;
	$('montant_sem2').value = arrondi($montantPubSem2, 2);
}

function setOnglet(id) {
    $$('div.onglet').each( function(e) { e.style.display = 'none'; } );
    $$('ul li').each(function(e) { e.className = '' ; });
    rank = id.split('_')[1];
    $('li_' + rank).className = 'active';
    $(id).style.display = 'block';
    document.location.replace('#'+id);
  }

function handleButton(event) {
    var e = Event.element(event);
    Event.stop(event);
    var current = e.href.split('#')[1];
    setOnglet(current);
}

function checkExpeEnvoiForm($expeId)
{
  $nbColis = $('nb_colis_' + $expeId).value;
  if(!$nbColis || isNaN($nbColis) || $nbColis < 1)
  {
    alert('Le nombre de colis doit être un entier supérieur à zéro');
    return false;
  }
  return true;
}

function checkPrepaForm($prepaId)
{
	$nbColis = $('nb_colis_' + $prepaId).value;
	if(!$nbColis || isNaN($nbColis) || $nbColis < 1)
	{
		alert("Le nombre de colis est obligatoire ; ce doit être un entier supérieur à zéro");
		return false;
	}
	$nbPalettes = $("nb_palettes_" + $prepaId).value;
	if(isNaN($nbColis) || '' == $nbPalettes || $nbPalettes < 0)
	{
		alert("Le nombre de palettes doit être un entier supérieur ou égal à zéro");
		return false;
	}
	$nbDemiPalettes = $("nb_demi_palettes_" + $prepaId).value;
	if(isNaN($nbDemiPalettes) || '' == $nbDemiPalettes || $nbPalettes < 0)
	{
		alert("Le nombre de demi-palettes doit être un entier supérieur ou égale à zéro");
		return false;
	}
	return true;
}

function checkDemandeChiffrageForm()
{
	if(!$("demande_descr").value)
	{
		alert("Veuillez saisir une description");
		return false;
	}
	var hasPj = false;
	var inputFiles = $$("input.file_input");
	for(i = 0; i < inputFiles.length; i++)
	{
		if(inputFiles[i].value)
		{
			hasPj = true;
			break;
		}
	}
	if(!hasPj)
	{
		return confirm("Vous n'avez pas joint de fichier. Voulez-vous malgré tout soumettre votre demande ?");
	}
	return true;
}

function addFileInput()
{
  var inputs = $$("input.file_input");
  inputLength = inputs.length;
  inputLength++;
  regExp = new RegExp(/{{x}}/g);
  var template = $("prototype").value.replace(regExp, inputLength);
  new Insertion.Before("add_pj", template);
  if(inputLength == 8)
  {
	  $("add_pj").toggle();
  }
}

function displayMaterielParEtat(etatStock)
{
	$$('div.stock_materiel').each(function(elt) { 
		if('tous' == etatStock)
	    {
		  elt.show(); 
	    }
		else
		{
			if(elt.hasClassName(etatStock))
			{
				elt.show();
			}
			else
			{
				elt.hide();
			}
		}
	});
}

function checkChiffrageForm(id)
{
	choix = getCheckedValue(document.getElementsByName("choix_" + id));
	if(!choix)
	{
		alert("Veuillez sélectionner une action (réponse ou refus)");
		return false;
	}
	montant = $("montant_" + id).value;
	if(!montant || isNaN(montant))
	{
		alert("Veuillez saisir un chiffrage au format numérique, SVP");
		return false;
	}
	if(choix == "refuser" && $("commentaire_" + id).value == '')
	{
		alert("Commentaire obligatoire en cas de refus");
		return false;
	}
	// alert("OK"); return false;
	return true;
}

function checkReponseChiffrageForm(id)
{
	choix = getCheckedValue(document.getElementsByName("choix_" + id));
	if(!choix)
	{
		alert("Veuillez sélectionner une action (commentaire, approbation ou refus)");
		return false;
	}
	if((choix == "commenter" || choix == "refuser") && $("commentaire_" + id).value == '')
	{
		alert("Commentaire obligatoire pour l'action que vous avez choisie");
		return false;
	}
	// alert("OK"); return false;
	return true;
}
