startResaEngine = function(options){
  
  initfbox = function(){
    $(".fbox").fancybox({ 'hideOnContentClick': false });
    $(".lgfbox").fancybox({ 'hideOnContentClick': false }); // menu langues
    $(".bigfbox").fancybox({ frameWidth: 700, frameHeight: 500 }); // charte parrainage
  }
  
  initfbox();
  
  // Calcul ajax des frais de port en fonction du pays et des options
  recalculeport = function(){
    $('#countryinfo').html('<img src="/images/loading.gif" alt="Chargement"/>').css({visibility:'visible'});
    $('.portcalculate').html('<img src="/images/loading.gif" alt="Chargement"/>');
    var serialize = $('#resaform').formSerialize();
    $.get('/'+options.lang+'/commander/calculport?'+serialize,function(data){
      $('#livraisonpanel').html(data);      
      $('#livraisonpanel input').bind('click',function(){recalculepack();btlivraison()});
      btlivraison();
      $('#resaform select[name=pays]').bind('change',recalculeport);
      initfbox();
      
    });
  }

  // Calcul inline du montant du pack en fonction des options
  recalculepack = function(){
    var total=0;
    var port = $('#modeslivraison input:checked').parent().parent().find('.portcalculate');
    if(port) {
      var portval = parseInt(port.attr('rel'));
      if(!isNaN(portval)) {
        total+=portval;
      }
    }
    $('#optionscontainer input[type=radio]:checked').each(function(){
      total+=parseFloat($(this).attr('class'));
    });
    $('#optionscontainer select').each(function(){
      numitems=$(this).val();
      if(isNaN(numitems)) {numitems=0;}
      total+=parseFloat($(this).attr('class'))*numitems;
    })
    $('#comtotal').text(total);
    if(typeOf(options.comaccrochecalcul)=='function') {
      $('#comaccroche span').text(Math.round(options.comaccrochecalcul(total)));
    }
  };

  $('#modeslivraison input[type=radio]').bind('click',recalculepack);

  // Navigation par onglets 
  var $tabs = $("#reservertabs").tabs({
    // Validation pour passer aux onglets suivants
    select:function(event,ui) {
      var step1=1-options.inpos;
      var step2=3-options.inpos;      
      var step3=5-options.inpos;            
      if(ui.index>step1 && $('select[name=modele]').val().length<1) return false;
      if(ui.index>step2 && $('#livraisoncontainer input:checked').length<1) return false;
      if(ui.index==step3) return false;
      if(typeof(options.extraSelectTrigger)=='function') {
        options.extraSelectTrigger(options,event,ui);
      }
      return true;
    }
  });
  $('.ui-tabs-nav a').click(function(){return false;});
  // Sélection de la couleur du E>One
  $('.eone').click(function(){
    var ref = $(this).find('img').attr('alt');
    $('.eone').removeClass('selected');
    $(this).addClass('selected');
    $('select[name=modele]').val(ref);
    $('#packcontainer .nextTab').show().css({visibility:'visible'});
  });
  
  $('.eone').hover(
    function(){
      $(this).addClass('hover');
    },
    function(){
      $(this).removeClass('hover');
    }
  );

  // Navigation par bouton "continuer" / "retour"
  $('a.nextTab').bind('click',function(){
    $tabs.tabs('select',$tabs.tabs('option', 'selected') + 1);
    return false;
  });
  $('.previousTab').bind('click',function(){
    $tabs.tabs('select',$tabs.tabs('option', 'selected') - 1);
    return false;
  });


  // Comportement particulier des boutons radio
  $('.itemslist input[type=radio]').hide();
  $('.radiocontainer').bind('click',function(){
    radioname = $(this).find('input[type=radio]').trigger('select');
  });
  // Page choix livraison : pas de bouton "suivant" si pas de modes de livraison coché
  btlivraison = function(){
    var pos = $('input[name=pos]:checked').length;
    if(pos==0) {
      $('#livraisoncontainer .nextTab').hide();
    } else {
      $('#livraisoncontainer .nextTab').show();   
      var inpos = $('input[name=pos]:checked').parent().find('.inpos').text();
      var hasrelais = parseInt($('input[name=pos]:checked').parent().find('.hasrelais').text());
      if(hasrelais!=1) {
        $('#adrrelaisbox').hide();
        $('label[for=adrrelaisbox]').hide();
        $('#relaiscontainer').hide();
      } else {
        $('#adrrelaisbox').show();
        $('label[for=adrrelaisbox]').show();        

      }
      if(inpos=='1'){
        $('#livraisondata').hide();
      } else {
        $('#livraisondata').show();        
      }
      
    }
  }
  $('#livraisoncontainer input[type=radio]').bind('click',btlivraison);
  btlivraison();
  // Soumission du formulaire
  $('input.nextTab').bind('click',function(){
    $('<span id="subloading" style="color:#888;float:right;display:block;padding:5px 10px">Création de votre compte... <img src="/images/loading.gif" /></span>').prependTo($(this).parent());
    $(this).hide();
    var subbutton=$(this);
    $('.errorbullet').remove();
    $(':input').removeClass('formError');
    $('#resaform').ajaxSubmit({
      success:function(data){
      // Réponse en json
        $('#subloading').remove();
        $(subbutton).show();
        eval("response="+data+";");
        if(response.success == 1) {
          top.location.href=response.paiementurl;
        } else {
          for(field in response.errors) {
            $('<div class="errorbullet"><div>'+response.errors[field]+'</div></div>').insertAfter($(':input[name^='+field+']:last').addClass('formError').eq(0));
          }
          $.scrollTo($('.errorbullet'),{speed:500,over:150});
          recalculepack();
        }
      }
    });
    return false;
  });
  // Affichage instructions de livraison
    $(function(){
      $('#showobserv').bind('click',function(){$('#observinfo').show();return false});
    })

  // Adresse livraison/facturation/relais
  showlivr = function(){
    if($('#adrdiffbox').attr('checked')) {
      $('#relaiscontainer').hide();
      $('#adrlivraison').show();
    } else {
      $('#adrlivraison').hide();
    }
    if($('#adrrelaisbox').attr('checked')) {
      $('#adrlivraison').hide();
      $('#livraisoninstructions').hide();      
      $('#relaiscontainer').show().find('div').html(options.relaiswait).load('/reserver/relaislist',{cp:$('input[name=fact_cp]').val(),ville:$('input[name=fact_ville]').val(),defaultrelai:defaultrelai});
    } else {
      $('#relaiscontainer').hide();
      $('#livraisoninstructions').show();      
    }
  }
  // Cas particulier du bouton radio relais : on vérifie que le code postal est renseigné
  $('input[name=factdiff]').click(function(){
    if($(this).attr('id')=='adrrelaisbox') {
      var cp = $('input[name=fact_cp]').val();
      var ville = $('input[name=fact_ville]').val();
      if(cp.length<1 || ville.length<1) {
        $(this).removeAttr('checked');
        if(cp.length<1) {
          $('<div class="errorbullet"><div>Veuillez indiquer votre code postal</div></div>').insertAfter($(':input[name=fact_cp]').addClass('formError'));
        }
        if(cp.length<1) {
          $('<div class="errorbullet"><div>Veuillez indiquer votre ville</div></div>').insertAfter($(':input[name=fact_ville]').addClass('formError'));
        }
        $.scrollTo($('.errorbullet'),{speed:500,over:150});

        return false;
      } else {
        $('.errorbullet').remove();
      }
    }
    showlivr();
  });
  showlivr();
  // Connu
  showconnu = function(){
    var connu = $('select[name=connu]').val();
    if(connu=='' || connu=='ami' || connu=='referent') {
      $('#connu_autre').css({visibility:'hidden'});
    } else {
      $('#connu_autre').css({visibility:'visible'});      
    }
    if(connu=='agent') {
      $('#connu_autre').find('label').html(options.agentLabel);
    } else {
      $('#connu_autre').find('label').html(options.precisezLabel);      
    }
  }
  $('select[name=connu]').bind('change',showconnu);
  showconnu();
  // Evenements associés
  $('#optionscontainer input[type=radio]').bind('select',function(){
    var radioname = $(this).attr('name');
    $('input[name='+radioname+']').parent().parent().removeClass('selected');
    $(this).parent().parent().addClass('selected');
    $(this).attr('checked','checked');
    recalculepack();
  });
  $('#optionscontainer select').bind('change',function(){
    recalculepack();
    var num=$(this).val();
    if(num>0) {
      $(this).parent().parent().addClass('selected');
    } else {
      $(this).parent().parent().removeClass('selected');
    }
    });
  $('#reservertabs').bind('tabsselect', function(event, ui) {
    panelid = $(ui.panel).attr('id');
    if(panelid=='livraisoncontainer') {
      recalculeport();
    }   
  });  
  $('#resaform select[name=pays]').bind('change',recalculeport);
  recalculeport();
  recalculepack();
  var color = $('select[name=modele]').hide().val();
  $('.eone img[alt='+color+']').parent().click();

  // intialisation des styles des radios cachés
  $('input[type=radio]:checked').click();

}
