if (!Kwo) var Kwo = {};
if (!Crm) var Crm = {};

function number_format (number, decimals, dec_point, thousands_sep) {
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

function perUserChange(elt) {
  Kwo.go('/account/crm/dashboard', {user:elt.value});
}

Crm.Contact = {
  onDelete: function(id) {
    if (id > 0) {
      if (confirm('Voulez-vous vraiment supprimer ce contact ?')) {
        Kwo.exec("/account/crm/contact.drop",
                 {'id':id},
                 {callback:Crm.Contact.onDeleteCallback});
      }
    }
    return false;
  },
  onDeleteCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.go('/account/crm/manage.comptes');
    }
  }
}
Crm.Compte = {
  onDelete: function(id) {
    if (id > 0) {
      if (confirm('Voulez-vous vraiment supprimer ce compte ?')) {
        Kwo.exec("/account/crm/compte.drop",
                 {'id':id},
                 {callback:Crm.Compte.onDeleteCallback});
      }
    }
    return false;
  },
  onDeleteCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.go('/account/crm/manage.comptes');
    }
  },
  onExportSage: function(compte_id) {
    Kwo.exec('/account/crm/export.sage',{'id' : compte_id},
             {callback:Crm.Compte.onExportSageCallback});
  },
  onExportSageCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.go('/file/get',{'path':res.result.path});
    }
  }
}

Crm.AlertMessage = {
  onError: function(message) {
    if (typeof message == "object" && "result" in message && "msg" in message["result"]) {
      message = message["result"]["msg"];
    }
    if (message instanceof Array) {
      var out = "";
      message.each(function(item) {
        out += item + "<br />";
      });
      message = out;
    }
    else {
      message = message.ucfirst();
    }
    var blocAlert = new Element('div').update(message);
    blocAlert.addClassName('message-error');
    $('messages').update(blocAlert);
  },
  onValid: function(message) {
    if (typeof message == "object" && "result" in message && "msg" in message["result"]) {
      message = message["result"]["msg"];
    }
    if (message instanceof Array) {
      var out = "";
      message.each(function(item) {
        out += " - " + item + "<br />";
      });
      message = out;
    }
    else {
      message = message.ucfirst();
    }
    var blocAlert = new Element('div').update(message);
    blocAlert.addClassName('message-valid');
    $('messages').update(blocAlert);
  }
}
Crm.Communaute = {
  onChangeSearch: function(elt) {
    var elt = $(elt);
    var value = elt.getValue();
    if($('search[export]')) {
      $('search[export]').setStyle({'display':'none'});  
    }
    if (value == 'all') {
      Crm.Communaute.onSearchClean();
    } else if (value == 'compte') {
      Crm.Communaute.onSearchCompte(elt.form);
      if($('search[export]')!= null) {
        $('search[export]').setStyle({'display':'block'});  
      }
    } else if (value == 'contact') {
      Crm.Communaute.onSearchContact(elt.form);
    }
  },
  onSearchCompte: function(form) {
    var form = $(form);
    $('contact-options-holder').update('');
    $('contacts-list').hide();
    $('comptes-list').show();
    Kwo.exec('/account/crm/compte.search.options', {},
             {container: 'compte-options-holder'});
    
  },
  onSearchContact: function(form) {
    $('compte-options-holder').update('');
    $('comptes-list').hide();
    $('contacts-list').show();
    Kwo.exec('/account/crm/contact.search.options', {},
             {container: 'contact-options-holder'});
  },
  onSearchClean: function() {
    $('contacts-list').show();
    $('comptes-list').show();
    $('contact-options-holder').update('');
    $('compte-options-holder').update('');
  },
  onSearch: function(form, _type) {
    var form = $(form);
    if(!_type) {
      var type = $('type').getValue();
    } else {
      var type = _type;
    }
  
    var args = [form, {type:type}];
    
    if($('search[export]')) {
      $('search[export]').remove();  
    }
    if (type == 'compte' || type == 'all' || type == 'export') {
      if(type != 'all') {
        button = '<input id="search[export]" class="btn" style="margin-left:5px;" type="button" value="Exporter les emails" />';
        form.down('[type="submit"]').insert({'after':button});
        form.observe('change', function() { $('search[export]').setStyle({'display':'none'});  });
        $('search[export]').observe('click',  Crm.Communaute.onSearch.curry(form, 'export'));
      }
      Crm.Communaute.onSearchItem(args,'compte');
    }
    if (type == 'contact' || type == 'all') {
      Crm.Communaute.onSearchItem(args,'contact');
    }
  },
  onPaginatedSearch: function(link,form,type) {
    var link = $(link);
    var offset = link.readAttribute('data-offset');
    $(type+'-offset').value = offset;
    var form = $(form);
    var args = [form];
    Crm.Communaute.onSearchItem(args,type);
  },
  onToggleOrder: function(elt) {
    var elt = $(elt);
    var orderby = elt.readAttribute('data-order-by');
    var direction = elt.readAttribute('data-direction');
    
    
    $('order_by').value = orderby;
    $('order_direction').value = direction;
    
    var new_direction = (direction == 'asc') ? 'desc' : 'asc';
    
    elt.writeAttribute('data-direction', new_direction);
    
    var form = $(elt.readAttribute('data-form'));
    var type = elt.readAttribute('data-type');
    var args = [form];
    
    Crm.Communaute.onSearchItem(args,type);
    
  },
  onSearchItem: function(args, type) {
    if(args.length > 1 && args[1].type == 'export') {
      Kwo.go('/account/crm/search.'+(args,type), args);
    } else  {
      Kwo.exec('/account/crm/search.'+(args,type), args,
             {container : type+'s'});
    }
  },
  onApe: function() {
    var action = '/account/crm/code.ape';
    var code = '';
    new Kwo.Dialog(action,
                   {'code': code},
                   {width: 600, height: 400, name: "code_ape"});
  },
  onApeSelect: function(elt) {
    var elt = $(elt);
    var code = elt.readAttribute('data-code');
    var libelle = elt.readAttribute('data-libelle');
    var target_code = elt.readAttribute('data-target-code');
    var target_libelle = elt.readAttribute('data-target-libelle');
    
    $(target_code).value = code;
    $(target_libelle).value = libelle;
    
    Kwo.getDialog('code_ape').close();
  },
  onApeEmpty: function() {
    $('code-ape').value = '';
    $('code-ape-lib').value = '';
  },
  onComptePicker: function() {
    var action = '/account/crm/choose.compte';
    new Kwo.Dialog(action,{},
                   {width: 600, height: 400, name: "compte_picker"});
  },
  onContactPicker: function() {
    var action = '/account/crm/choose.contact';
    new Kwo.Dialog(action,{},
                   {width: 600, height: 400, name: "contact_picker"});
  },
  onOrderdetailPicker: function() {
    var action = '/account/crm/choose.orderdetail';
    new Kwo.Dialog(action,{},
                   {width: 600, height: 400, name: "orderdetail_picker"});
  },
  onSiegePicker: function() {
    var action = '/account/crm/choose.siege';
    new Kwo.Dialog(action,{},
                   {width: 600, height: 400, name: "siege_picker"});
  },
  onGroupePicker: function() {
    var action = '/account/crm/choose.groupe';
    new Kwo.Dialog(action,{},
                   {width: 600, height: 400, name: "groupe_picker"});
  },
  onSiegeFilter: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/choose.siege',args,{container: 'sieges'})
  },
  onGroupeFilter: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/choose.groupe',args,{container: 'groupes'})
  },
  onSiegeSelect: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    $('siege-id').value = id;
    $('siege_name').update(elt.innerHTML);

    Kwo.getDialog('siege_picker').close();
  },
  onGroupeSelect: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    $('groupe-id').value = id;
    $('groupe_name').update(elt.innerHTML);

    Kwo.getDialog('groupe_picker').close();
  },
  onCompteEmpty: function() {
    $('compte_id').value = 0;
    $('compte_name').update('');
  },
  onContactEmpty: function() {
    $('contact_id').value = 0;
    $('contact_name').update('');
  },
  onOrderdetailEmpty: function() {
    $('orderdetail_id').value = 0;
    $('orderdetail_name').update('');
  },
  onSiegeEmpty: function() {
    $('siege-id').value = 0;
    $('siege_name').update('');
  },
  onGroupeEmpty: function() {
    $('groupe-id').value = 0;
    $('groupe_name').update('');
  },
  onCompteSubmit: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/compte.save',args,
             {callback: Crm.Communaute.onCompteSubmitCallback, 
              disabled: true})
  },
  onCompteSubmitCallback: function(res) {
    if (Kwo.hasError(res)) {
      Crm.AlertMessage.onError(res);
    } else {
      $('id').value = res.result.id;
      Kwo.go('/account/crm/compte.view?id='+res.result.id);
    }
  },
  onPickerOpen: function(elt) {
    var elt = $(elt);
    var type = elt.readAttribute('data-type')
    var action = '/account/crm/choose.'+type;
    new Kwo.Dialog(action,{'show_form' : 1},
                   {width: 600, height: 400, name: type+"_picker"});
  },
  onPickerFilter: function(form) {
    var form = $(form);
    var type = form.readAttribute('data-type');
    var args = [form];
    Kwo.exec('/account/crm/choose.'+type,args,{container: type+'s'});
  },
  onPickerSelect: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    var type = elt.readAttribute('data-type');
    $(type+'_id').value = id;
    $(type+'_name').update(elt.innerHTML);

    if (type == 'compte' && $('assigned_to') != undefined) {
      $('assigned_to').hide();
    }
    if (type == 'compte' && $('orderdetail_addresses') != undefined) {
      Crm.OrderDetail.onCompteSelect(id);
    }

    Kwo.getDialog(type+'_picker').close();
  },
  onPickerEmpty: function(elt) {
    var elt = $(elt);
    var type = elt.readAttribute('data-type');
    $(type+'_id').value = 0;
    $(type+'_name').update('');
    if (type == 'compte') {
      $('assigned_to').show();
    } 
  },
  onContactSubmit: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/contact.save',args,
             {callback: Crm.Communaute.onContactSubmitCallback, 
              disabled: true})
  },
  onContactSubmitCallback: function(res) {
    if (Kwo.hasError(res)) {
      Crm.AlertMessage.onError(res);
    } else {
      $('id').value = res.result.id;
      //Crm.AlertMessage.onValid(res);
      Kwo.go('/account/crm/contact.view?id='+res.result.id);
    }
  },
  onChaffEdit: function(elt) {
    var elt = $(elt);
    var action = '/account/crm/chaff.edit';
    var type = elt.readAttribute('data-type');
    var compte_id = elt.readAttribute('data-compte');
    var id = elt.readAttribute('data-id');
    new Kwo.Dialog(action,{'type':type,'compte_id':compte_id,'id':id},
                   {width: 350, height: 220, name: "chaff_edit"});
  },
  onChaffSubmit: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/chaff.save',args,
             {callback: Crm.Communaute.onChaffSubmitCallback,
              disabled: true});
  },
  onChaffSubmitCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.getDialog('chaff_edit').close();
      Kwo.reload();
    }
  },
  onValidateCompte: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-compte');
    Kwo.exec('/account/crm/compte.valid',{'id':id},
             {callback: Crm.Communaute.OnValidateCompteCallback});
  },
  OnValidateCompteCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      //alert('so what');
      Kwo.reload();
    }
  },
  onValidateContactAccess: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-user');
    Kwo.exec('/account/crm/contact.access.valid',{'id':id},
             {callback: Crm.Communaute.onValidateContactAccessCallback});
  },
  onValidateContactAccessCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.reload();
    }
  },
  onGenerateContactAccess: function(elt) {
    var elt = $(elt);
    var contact = elt.readAttribute('data-contact');
    new Kwo.Dialog('/account/crm/contact.access.create',{'id':contact},
               {width: 300, height: 250, name: 'access_create'});
  },
  onSubmitContactAccess: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/contact.access.save',args,
             {callback: Crm.Communaute.onSubmitContactAccessCallback});
  },
  onSubmitContactAccessCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.getDialog('access_create').close();
      Kwo.reload();
    } 
  }
}
Crm.Administration = {
  onSearch: function(form) {
    var form = $(form);
    var type = $('type').getValue();
    var args = [form];
    
    if (type == 'employee' || type == 'all') {
      Crm.Administration.onSearchItem(args, 'employee');    
    }
    if (type == 'user' || type == 'all') {
      Crm.Administration.onSearchItem(args, 'user');
    }
    if (type == 'team' || type == 'all') {
      Crm.Administration.onSearchItem(args, 'team');
    }
  },
  onSearchItem: function(args,type) {
    Kwo.exec('/account/crm/search.'+(args,type), args,
             {container : type+'s'});
  },
  onEmployeeSubmit: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/employee.save',args,
             {callback: Crm.Administration.onEmployeeSubmitCallBack, 
              disabled: true})
  },
  onEmployeeSubmitCallBack: function(res) {
    if (Kwo.hasError(res)) {
      Crm.AlertMessage.onError(res);
    } else {
      $('id').value = res.result.id;
      Crm.AlertMessage.onValid(res);
    }
  },
  onUserSubmit: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/user.save',args,
             {callback: Crm.Administration.onUserSubmitCallBack, 
              disabled: true})
  },
  onUserSubmitCallBack: function(res) {
    if (Kwo.hasError(res)) {
      Crm.AlertMessage.onError(res);
    } else {
      $('id').value = res.result.id;
      Crm.AlertMessage.onValid(res);
    }
  },
  
  onTeamSubmit: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/team.save',args,
             {callback: Crm.Administration.onTeamSubmitCallBack, 
              disabled: true})
  },
  onTeamSubmitCallBack: function(res) {
    if (Kwo.hasError(res)) {
      Crm.AlertMessage.onError(res);
    } else {
      $('id').value = res.result.id;
      Crm.AlertMessage.onValid(res);
    }
  },
  
  select_add: function (id) {
    var selFrom = $(id+'_options');
    var selTo = $(id+'_choice');
    var selToBis = $(id+'_selection');
    if (selFrom.selectedIndex<0) return;
    optsel = selFrom.options[selFrom.selectedIndex];
    if (optsel<0) return;
    selFrom.remove(selFrom.selectedIndex);
    selTo.options[selTo.options.length] = new Option(optsel.text,optsel.value,false,false);
    selToBis.options[selToBis.options.length] = new Option(optsel.text,optsel.value,true,true);
  },
  select_remove: function (id) {
    var selFrom = $(id+'_choice');
    var selFromBis = $(id+'_selection');
    if (selFrom.selectedIndex<0) return;
    var selTo = $(id+'_options');
    var optsel = selFrom.options[selFrom.selectedIndex];
    if (optsel<0) return;
    selFrom.remove(selFrom.selectedIndex);
    for (var i=0;i<selFromBis.length;i++) {
      if (selFromBis.options[i].value == optsel.value) {
      selFromBis.remove(i);
      break;
      }
    }
    selTo.options[selTo.options.length] = new Option(optsel.text,optsel.value,false,false);
  }
};

Crm.Accordion = Class.create({
  initialize: function(elt) {
    this.elt = $(elt);
    this.id = this.elt.identify();
    $$('#' + this.id + ' .accordion_content').each(function(content) {
      content.hide();
    });
    $$('#' + this.id + ' .accordion_toggle').each(function(toggler) {
      toggler.observe('click',function(evt) {
        var title = Event.findElement(evt,'.accordion_toggle');
        this.activate(title);
      }.bind(this));
    }.bind(this));
  },
  activate: function(toggler) {
    $$('#' + this.id + ' .accordion_toggle').each(function(opened) {
      if (toggler != opened) {
        opened.next(0).hide();
        opened.removeClassName('accordion_toggle_on');
      }
    });
    toggler.addClassName('accordion_toggle_on');
    toggler.next(0).show();
  }
});

Crm.Tabs = Class.create({
  initialize: function(elt) {
    this.tabs = $(elt);
    this.nav = this.tabs.down('ul.nav-tab');
    this.nav.childElements().each(function(li, index) {
      //console.log(index)
      if (index > 0) {
        var step = li.readAttribute('data-step');
        //console.log(step);
        $('step'+step).hide();
      } else {
        li.addClassName('active');
      }
      li.observe('click',function(evt) {
        var elem = Event.findElement(evt,'li');
        if (!elem.hasClassName('active')) {
          var step = elem.readAttribute('data-step');
          this.activate(step);
        }
      }.bind(this))
    }.bind(this));
  },
  activate: function(step) {
    var step = step;
    this.nav.childElements().each(function(li) {
      var li_step = li.readAttribute('data-step');
      if (step != li_step) {
        li.removeClassName('active');
        $('step'+li_step).hide();
      } else {
        li.addClassName('active');
        $('step'+li_step).show();
      }
    }.bind(step));
  }
});

Crm.OrderDetail = {
  onSendBC: function(orderdetailid, statusid) {
    if(statusid == -10 || statusid > 20) {
      switch(statusid) {
        case -10:
          var error = "Le bon de commande a été perdu. Veuillez dupliquer le devis ou changer son statut.";
          break;
        case 30:
          var error = "Ce bon de commande a déjà été envoyé et confirmé par le client. Si vous souhaitez procéder à un nouvel envoi, veuillez dupliquer le devis";
          break;
        case 40:
          var error = "La commande est en cours. Le bon de commande ne peut pas être envoyé. Veuillez changer le statut du devis.";
          break;
      }
      alert(error);
      return;
    } 
    Kwo.go('/account/crm/desk.mail/-/devis/'+orderdetailid+'/type/bc');
  },
  onSearch: function(form) {
    var form = $(form);
    var type = $('type').getValue();
    
    var args = [form];
    
    Crm.OrderDetail.onSearchItem(args,type);
  },
  onPaginatedSearch: function(link,form,type) {
    var link = $(link);
    var offset = link.readAttribute('data-offset');
    $(type+'-offset').value = offset;
    var form = $(form);
    var args = [form];
    Crm.OrderDetail.onSearchItem(args,type);
  },
  onToggleOrder: function(elt) {
    var elt = $(elt);
    var orderby = elt.readAttribute('data-order-by');
    var direction = elt.readAttribute('data-direction');
    
    
    $('order_by').value = orderby;
    $('order_direction').value = direction;
    
    var new_direction = (direction == 'asc') ? 'desc' : 'asc';
    
    elt.writeAttribute('data-direction', new_direction);
    
    var form = $(elt.readAttribute('data-form'));
    var type = elt.readAttribute('data-type');
    var args = [form];
    
    Crm.OrderDetail.onSearchItem(args,type);
    
  },
  onSearchItem: function(args, type) {
    Kwo.exec('/account/crm/search.orderdetail', args,
             {container : 'orderdetails'});
  },
  onDuplicate: function(id) {
    Kwo.go('/account/crm/orderdetail.edit',{'id' : id, 'matrice' : 1});
  },
  onListMatrices: function() {
    var action = '/account/crm/list.matrices';
    new Kwo.Dialog(action,{},
                   {width: 600, height: 400, name: "matrice_picker"});
  },
  onOrderDetailSubmit: function(form) {
    $('preambule').value = CKEDITOR.instances['preambule'].getData(); 
    $('content').value = CKEDITOR.instances['content'].getData();
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/orderdetail.save',args,
             {callback: Crm.OrderDetail.onOrderDetailSubmitCallback, 
              disabled: true})
  },
  onMatriceSubmit: function(elt) {
    $('content').value = CKEDITOR.instances['content'].getData();
    var elt = $(elt);
    var form = elt.up('form');
    var flag = new Element('input',
                           {'type' : 'hidden',
                            'name' : 'is_matrice',
                            'value' : 1});
    form.insert({'top' : flag});
    var args = [form];
    Kwo.exec('/account/crm/orderdetail.save',args,
             {callback: Crm.OrderDetail.onOrderDetailSubmitCallback, 
              disabled: true})
  },
  onOrderDetailSubmitCallback: function(res) {
    if (Kwo.hasError(res)) {
      Crm.AlertMessage.onError(res);
    } else {
      $('id').value = res.result.id;
      $('messages').scrollTo();
      //Crm.AlertMessage.onValid(res);
      Kwo.go('/account/crm/orderdetail.view?id='+res.result.id);
    }
  },
  onLost : function(elt) {
    var elt = $(elt);
    var lost = elt.readAttribute('data-lostvalue');
    var value = elt.getValue();
    if (value == lost) {
      $('lost').show();
    } else {
      $('lost').hide();
    }
  },
  onAccesContactAdd: function(elt) {
    var elt = $(elt);
    elt.insert({'bottom' : '<br /><input type="text" name="orderdetail[acces_contacts][]" value="" />'});
  },
  onCompteSelect: function(id,side) {;
    if (id > 0) {
      Kwo.exec('/account/crm/get.compte.addresses', { 'id' : id, 'side' : side  },
               {callback:Crm.OrderDetail.onCompteSelectCallback});
    }
  },
  onCompteSelectCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      var billing = res.result.billing;
      var shipping = res.result.shipping;
      if (res.result.side == 'billing') {
        $('billing_address').value = billing.address;
        $('billing_address_extra').value = billing.address_extra;
        $('billing_postal_code').value = billing.postal_code;
        $('billing_city').value = billing.city;
        $('billing_region').value = billing.region;
        $('billing_country_id').value = billing.country_id;
      }
      
      $('shipping_address').value = shipping.address;
      $('shipping_address_extra').value = shipping.address_extra;
      $('shipping_postal_code').value = shipping.postal_code;
      $('shipping_city').value = shipping.city;
      $('shipping_region').value = shipping.region;
      $('shipping_country_id').value = shipping.country_id;
      
    }
  },
  onCopyAddress: function(type) {
    if (type == 'shipping') {
      $('billing_compte_id').value = $('shipping_compte_id').value;
      $('billing_compte_name').value = $('shipping_compte_name').value;
      $('billing_contact_id').value = $('shipping_contact_id').value;
      $('billing_contact_name').value = $('shipping_contact_name').value;
      $('billing_address').value = $('shipping_address').value;
      $('billing_address_extra').value = $('shipping_address_extra').value;
      $('billing_postal_code').value = $('shipping_postal_code').value;
      $('billing_city').value = $('shipping_city').value;
      $('billing_region').value = $('shipping_region').value;
      $('billing_country_id').value = $('shipping_country_id').value;
    } else if (type == 'billing') {
      $('shipping_compte_id').value = $('billing_compte_id').value;
      $('shipping_compte_name').value = $('billing_compte_name').value;
      $('shipping_contact_id').value = $('billing_contact_id').value;
      $('shipping_contact_name').value = $('billing_contact_name').value;
      $('shipping_address').value = $('billing_address').value;
      $('shipping_address_extra').value = $('billing_address_extra').value;
      $('shipping_postal_code').value = $('billing_postal_code').value;
      $('shipping_city').value = $('billing_city').value;
      $('shipping_region').value = $('billing_region').value;
      $('shipping_country_id').value = $('billing_country_id').value;
    }
  },
  onPickerOpen: function(elt) {
    var elt = $(elt);
    var type = elt.readAttribute('data-type');
    var side = elt.readAttribute('data-side');
    var action = '/account/crm/choose.orderdetail.'+type;
    new Kwo.Dialog(action,{'side' : side,'show_form' : 1},
                   {width: 600, height: 400, name: type+"_picker"});
  },
  onPickerFilter: function(form) {
    var form = $(form);
    var type = form.readAttribute('data-type');
    var args = [form];
    Kwo.exec('/account/crm/choose.orderdetail.'+type,args,{container: type+'s'});
  },
  onPickerSelect: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    var type = elt.readAttribute('data-type');
    var side = elt.readAttribute('data-side');
    if (elt.hasAttribute('data-mode-reglement')) {
      var mode_reglement = elt.readAttribute('data-mode-reglement');
      $('mode_reglement').value = mode_reglement;
    }
    $(side + '_' + type+'_id').value = id;

    $(side + '_' + type+'_name').update(elt.innerHTML);


    if (type == 'compte') {
      Crm.OrderDetail.onCompteSelect(id,side);
    }

    Kwo.getDialog(type+'_picker').close();
  },
  onPickerEmpty: function(elt) {
    var elt = $(elt);
    var type = elt.readAttribute('data-type');
    var side = elt.readAttribute('data-side');
    $(side + '_' + type + '_id').value = 0;
    $(side + '_' + type + '_name').update(''); 
  },
  onLotAdd: function() {
    if ($('billing_compte_id').value < 1) {
      alert('Choisir un compte');
      return false;
    }
    $$('.lot-row').each(function(lt,index) {
      lt.down('.order-lot').value = index;
      lt.writeAttribute('data-order', index);
    });
    
    var nbRows = $$('.lot-row').length;
    var row = window._maxlot;
    var order = nbRows;
    var lotnumber = nbRows + 1;
    
    new Ajax.Request('/account/crm/_lot', {
      requestHeaders: {"X-Kwo-Referer": window.location.href,
                      "X-Kwo-Request": "update"},
      onSuccess: function(response) {
        var template = new Template(response.responseText);
        var args = { 'row' : row,
                     'order' : order,
                     'lotnumber' : lotnumber };
        var lot = template.evaluate(args);;
        $('lots').insert({ 'bottom' : lot });
        $('bottom').scrollTo();
        window._maxlot++;
      }
    });
  },
  onLotDelete: function(elt) {
    var elt = $(elt);
    var lot = elt.up('.lot-row');
    lot.remove();
    Crm.OrderDetail.onCalcGeneralTotal(null);
    $$('.lot-row').each(function(lt,index) {
      lt.down('.order-lot').value = index;
      lt.writeAttribute('data-order', index);
    });
  },
  onCommentAdd: function(elt) {
    var elt = $(elt);
    var lot = elt.up('.lot-row');
    var row = lot.readAttribute('data-row');
    var nbComments = window._maxcomment;
    
    lot.select('.lot-item').each(function(item,index) {
      item.down('.order-item').value = index;
    });
    
    var nbChild = $$('.lot-item').length;
    
    new Ajax.Request('/account/crm/_comment', {
      requestHeaders: {"X-Kwo-Referer": window.location.href,
                      "X-Kwo-Request": "update"},
      onSuccess: function(response) {
        var template = new Template(response.responseText);
        var args = { 'idcomment' : nbComments,
                     'order' : nbChild,
                     'idlot' : row };
        
        var comment = template.evaluate(args);
        lot.insert({ 'bottom' : comment });
        $('bottom').scrollTo();
        window._maxcomment++;
      }
    });
    
  },
  onCommentDelete: function(elt) {
    var elt = $(elt);
    var lot = elt.up('.lot-row');
    var commentRow = elt.up('div.comment-row');
    commentRow.remove();
    lot.select('.lot-item').each(function(item,index) {
      item.down('.order-item').value = index;
    });
  },
  onProductAdd: function(elt) {
    var elt = $(elt);
    var lot = elt.up('.lot-row');
    var row = lot.readAttribute('data-row');
    var compteid = $('billing_compte_id').value;
    var nbProduct = window._maxproduct;
    lot.select('.lot-item').each(function(item,index) {
      item.down('.order-item').value = index;
    });
    var nbChild = $$('.lot-item').length;

    new Ajax.Request('/account/crm/_product', {
      requestHeaders: {"X-Kwo-Referer": window.location.href,
                      "X-Kwo-Request": "update"},
      onSuccess: function(response) {
        var template = new Template(response.responseText);
        var args = { 'idproduct' : nbProduct,
                     'idlot' : row,
                     'order' : nbChild,
                     'compteid' : compteid  };
        
        var product = template.evaluate(args);
        lot.insert({ 'bottom' : product });
        $('bottom').scrollTo();
        window._maxproduct++;
      }
    });
  },
  onProductDelete: function(elt) {
    var elt = $(elt);
    var lot = elt.up('.lot-row');
    var productRow = elt.up('div.product-row');
    var head = elt.up('.lot-row').down('.lot-row-head');
    productRow.remove();
    Crm.OrderDetail.onCalcSubTotal(head);
    lot.select('.lot-item').each(function(item,index) {
      item.down('.order-item').value = index;
    });
  },
  onProductPickerOpen: function(elt) {
    var elt = $(elt);
    var row = elt.readAttribute('data-row');
    var productrow = elt.readAttribute('data-productrow');
    var compteid = elt.readAttribute('data-compteid');
    var action = '/account/crm/choose.orderdetail.product';
    new Kwo.Dialog(action,{'productrow' : productrow,
                           'row' : row,
                           'compteid' : compteid },
                   {width: 600, height: 400, name: "product_picker"});
  },
  onProductPickerFilter: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/choose.orderdetail.product',args,{container: 'products'});
  },
  onProductPickerSelect: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    var row = elt.readAttribute('data-row');
    var productrow = elt.readAttribute('data-productrow');
    var ref = elt.readAttribute('data-reference');
    var price = elt.readAttribute('data-price');
    $('lot_'+ row +'_product_' + productrow).value = id;
    $('lot_'+ row +'_product_name_' + productrow).update(elt.innerHTML);
    $('lot_'+ row +'_product_ref_' + productrow).value = ref;
    $('lot_'+ row +'_product_ref_' + productrow).value = ref;
    $('lot_'+ row +'_product_price_' + productrow).value = price;
    $('lot_'+ row +'_product_quantity_' + productrow).value = 1;

    Kwo.getDialog('product_picker').close(); 
    Crm.OrderDetail.onCalcSubTotal('lot_'+ row +'_product_' + productrow);  
  },
  onCalcSubTotal: function(elt) {
    var elt = $(elt);
    var lot = elt.up('.lot-row');
    var quantities = lot.select('.input-quantity');
    
    var subTotal = 0;
    for (var i = 0; i < quantities.length; i ++) {
      lot.down('.input-price', i).value = number_format(lot.down('.input-price', i).value, 2, '.','');
      subTotal += (quantities[i].value * lot.down('.input-price', i).value);
    }
    lot.down('.sstotal-value').update(number_format(subTotal,2,'.',''));
    var fdPort = lot.down('input.livraison-value').value;
    var taxes = $('taxes').value * ( subTotal*1 + fdPort*1 )  / 100;
    lot.down('.taxes-value').update(number_format(taxes,2,'.',''));
    var total = subTotal*1 + fdPort*1 + taxes*1;
    lot.down('.total-value').update(number_format(total,2,'.',''));
    Crm.OrderDetail.onCalcGeneralTotal(null);
  },
  onCalcAllSubTotal: function() {
    $$('.lot-row').each(function(lot) {
      var quantities = lot.select('.input-quantity');
      var subTotal = 0;
      for (var i = 0; i < quantities.length; i ++) {
        lot.down('.input-price', i).value = number_format(lot.down('.input-price', i).value, 2, '.','');
        subTotal += (quantities[i].value * lot.down('.input-price', i).value);
      }
      //console.log(subTotal);
      lot.down('.sstotal-value').update(number_format(subTotal,2,'.',''));
      var fdPort = lot.down('input.livraison-value').value;
      var taxes = $('taxes').value * ( subTotal*1 + fdPort*1 )  / 100;
      lot.down('.taxes-value').update(number_format(taxes,2,'.',''));
      var total = subTotal*1 + fdPort*1 + taxes*1;
      lot.down('.total-value').update(number_format(total,2,'.',''));
    });
    Crm.OrderDetail.onCalcGeneralTotal(null);
  },
  onShowHideTotalGeneral: function(elt) {
    var elt = $(elt);
    if ($(elt).checked == true) {
      $('grand-total').show();
    } else {
      $('grand-total').hide();
    }
  },
  onCalcGeneralTotal: function() {
    if ($$('.lot-row .check-include:checked').length > 0) {
      var checks = $$('.lot-row .check-include:checked');
    } else {
      var checks = $$('.lot-row .check-include');
    }
    var subTotal = 0;
    for (var i = 0; i < checks.length; i++) {
      var lot = checks[i].up('.lot-row');
      var quantities = lot.select('.input-quantity');
      
      for (var j = 0; j < quantities.length; j ++) {
        subTotal += (quantities[j].value * lot.down('.input-price', j).value);
      }

    }
    $('grand-total').down('.sstotal-value').update(number_format(subTotal,2,'.',''));
    var fdPort = $('grand-total').down('input.livraison-value').value;
    var taxes = $('taxes').value * ( subTotal*1 + fdPort*1 )  / 100;
    $('grand-total').down('.taxes-value').update(number_format(taxes,2,'.',''));
    var total = subTotal*1 + fdPort*1 + taxes*1;
    $('grand-total').down('.total-value').update(number_format(total,2,'.',''));
  },
  onItemOrderDown: function(elt) {
    var elt = $(elt);
    var item = elt.up('.lot-item');
    var lot = elt.up('.lot-row');
    
    if (item.nextSiblings().length > 0) {
      var clone = item.clone(true);
      item.nextSiblings()[0].insert({'after' : clone});
      item.remove();
    }
    lot.select('.lot-item').each(function(item,index) {
      item.down('.order-item').value = index;
    });
  },
  onItemOrderUp: function(elt) {
    var elt = $(elt);
    var item = elt.up('.lot-item');
    var lot = elt.up('.lot-row');
    
    if (item.previousSiblings().length > 0 && item.down('.order-item').value > 0) {
      var clone = item.clone(true);
      item.previousSiblings()[0].insert({'before' : clone});
      item.remove();
    }
    lot.select('.lot-item').each(function(item,index) {
      item.down('.order-item').value = index;
    });
  },
  onMailDevis: function(elt) {
    var elt = $(elt);
    var action = '/account/crm/mail.devis';
    var id = elt.readAttribute('data-id');
    new Kwo.Dialog(action,
                   {'id': id},
                   {width: 600, height: 400, name: "mail_devis_modal"});   
  },
  onSendMailDevis: function(form) {
    var form = $(form);
    var args = [form];
    
    Kwo.exec('/account/crm/send.mail.devis',args,
             {callback:Crm.OrderDetail.onSendMailDevisCallback});
  },
  onSendMailDevisCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      $('mail-devis-container').update('Mail envoyé');
      Kwo.exec('/account/crm/orderdetail.view.controls', {'id':res.result.id},{container : 'control-wrapper'});  
    } 
  },
  onMailBc: function(elt) {
    var elt = $(elt);
    var action = '/account/crm/mail.bc';
    var id = elt.readAttribute('data-id');
    new Kwo.Dialog(action,
                   {'id': id},
                   {width: 600, height: 400, name: "mail_bc_modal"});   
  },
  onSendMailBc: function(form) {
    var form = $(form);
    var args = [form];
    
    Kwo.exec('/account/crm/send.mail.bc',args,
             {callback:Crm.OrderDetail.onSendMailBcCallback});
  },
  onSendMailBcCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      $('mail-bc-container').update('Mail envoyé');
      Kwo.exec('/account/crm/orderdetail.view.controls', {'id':res.result.id},{container : 'control-wrapper'});
    } 
  },
  onDrop: function(elt) {
    var elt = $(elt);
    var action = '/account/crm/orderdetail.drop';
    var id = elt.readAttribute('data-id');
    new Kwo.Dialog(action,
                   {'id': id},
                   {width: 600, height: 400, name: "drop_modal"});
  },
  onDropSubmit: function(form) {
    var form = $(form);
    var args = [form];
    
    Kwo.exec('/account/crm/orderdetail.drop.save',args,
             {callback:Crm.OrderDetail.onDropSubmitCallback});
  },
  onDropSubmitCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.exec('/account/crm/orderdetail.view.controls', {'id':res.result.id},{container : 'control-wrapper'});
      Kwo.getDialog('drop_modal').close();
    } 
  }
}
Crm.Order = {
  onSearch: function(form) {
    var form = $(form);
    var type = $('type').getValue();
    
    var args = [form];
    
    Crm.Order.onSearchItem(args,type);
  },
  onPaginatedSearch: function(link,form,type) {
    var link = $(link);
    var offset = link.readAttribute('data-offset');
    $(type+'-offset').value = offset;
    var form = $(form);
    var args = [form];
    Crm.Order.onSearchItem(args,type);
  },
  onToggleOrder: function(elt) {
    var elt = $(elt);
    var orderby = elt.readAttribute('data-order-by');
    var direction = elt.readAttribute('data-direction');
    
    
    $('order_by').value = orderby;
    $('order_direction').value = direction;
    
    var new_direction = (direction == 'asc') ? 'desc' : 'asc';
    
    elt.writeAttribute('data-direction', new_direction);
    
    var form = $(elt.readAttribute('data-form'));
    var type = elt.readAttribute('data-type');
    var args = [form];
    
    Crm.Order.onSearchItem(args,type);
    
  },
  onSearchItem: function(args, type) {
    Kwo.exec('/account/crm/search.order', args,
             {container : 'orders'});
  },
  onStatusOpen: function(elt) {
    var elt = $(elt);
    var action ="/account/crm/order.status.change";
    var id = elt.readAttribute('data-id');
    new Kwo.Dialog(action,
                   {'id': id},
                   {width: 300, height: 50, name: "order_status_modal"});
  },
  onStatusChange: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/order.status.save',args,
             {callback:Crm.Order.onStatusChangeCallback});    
  },
  onStatusChangeCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.reload();
    } 
  }
}


Kwo.Preview = Class.create(Kwo.Dialog, {

  initialize: function($super, elt) {
    elt = $(elt);
    this.name = "usr";
    this.args = {};
    if ($(elt).readAttribute("data-item-key")) {
      this.args["item_key"] = $(elt).readAttribute("data-item-key");
    }
    else {
      this.args["url"] = $(elt).readAttribute("data-url");
    }
    this.width = 1100;
    this.height = 580;
    this.className = "layout-hbox";
    $super(this.onDisplay);
  },

  onDisplay: function() {
    Kwo.exec("/back/core/item.preview", this.args,
             {container: this.support,
              callback: this.onLoad.bind(this)});
  },

  onLoad: function() {
    var iframe = this.support.down("IFRAME");
    iframe.src = iframe.readAttribute("data-url");
  }

});

Crm.Cal = {
  onMonthLoad: function() {
    var height = document.viewport.getHeight() - $('calendar').positionedOffset()['top'] - 35; 
    $('calendar').setStyle({'height':height+'px'});
  },
  onEdit: function(elt) {
    var elt = $(elt);
    var action ="/account/crm/activity.edit";
    
    var date = elt.readAttribute('data-id');
       
    if (elt.hasAttribute('data-id')) {
      var id = elt.readAttribute('data-id');
      var args = {'id':id};
    } else {
      var args = {};
    }
    
    if (elt.hasAttribute('data-date')) {
      args.date = elt.readAttribute('data-date');
    }
    if (elt.hasAttribute('data-preset-type')) {
      args.preset_type = elt.readAttribute('data-preset-type');
      args.preset_id = elt.readAttribute('data-preset-id');
    } 
    
    new Kwo.Dialog(action,
                   args,
                   {width: 600, height: 450, name: "activity_edit_modal"}); 
  },
  onDelete: function(elt) {
    if (confirm('Voulez vraiment supprimer cet élément ?')) {
      var elt = $(elt);
      var action ="/account/crm/activity.delete";
      var id = elt.readAttribute('data-id');
      var args = {'id':id};
      Kwo.exec(action,args,
               {callback: Crm.Cal.onDeleteCallback});
    }
  },  
  onDeleteCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.reload();
    }
  },
  onChangeType: function(elem) {
    var elem = $(elem);
    var type = (elem.hasAttribute('data-type')) ? elem.readAttribute('data-type') : elem.getValue();
    $$('.activity-fields').each(function(elt) {
      if (type == elt.readAttribute('data-type')) {
        elt.show();
      } else {
        elt.hide();
      }
    });
    if (type == 2 || type == 3) {
      $('invitations').show();
    } else {
      $('invitations').hide();
    }
  },
  onActivitySubmit: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/activity.save',args,
             {callback: Crm.Cal.onActivitySubmitCallback})
  },
  onActivitySubmitCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.reload();
    }
  },
  onActivityView: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-activity-id');
    var action = '/account/crm/activity.view';
     new Kwo.Dialog(action,
                   {'id': id},
                   {width: 600, height: 450, name: "activity_view_modal"});
  },
  onAddInvite: function(elt) {
    var elt = $(elt);
    var id = elt.getValue();
    var name = elt.options[elt.selectedIndex].innerHTML;
    
    var tpl  = '<div class="invited-block">';
        tpl += '  <input type="hidden" name="invited[]" value="#{invitedid}" />';
        tpl += '  <span>#{invitedname}</span>';
        tpl += '  <a href="javascript:void(0)" onclick="Crm.Cal.onDelInvit(this)">supprimer</a>';
        tpl += '</div>';
    
    var is_uninvited_yet = true; 
    $$('.invited-block input').each(function(input) {
      if (input.getValue() == id) {
        is_uninvited_yet = false;
      }
    });
    if (is_uninvited_yet == true){
      var mytemplate = new Template(tpl);
      var data = {'invitedid': id,
                'invitedname': name};
      $('invited').insert({'bottom' : mytemplate.evaluate(data)});
    }
    
  },
  onDelInvit: function(elt) {
    var elt = $(elt);
    var div = elt.up('.invited-block');
    div.remove();
  },
  onAcceptInvit: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    if (elt.hasAttribute('data-refuse')) {
      var args= {'id' : id,
                 'refuse' : 1};
    } else {
      var args = {'id' : id};
    }
    
    Kwo.exec('/account/crm/accept.invitation', args,
             {callback: Crm.Cal.onAcceptInvitCallback})
  },
  onAcceptInvitCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.reload();
    }
  },
  onRefuseInvit: function(elt) {
  
  }
};
Crm.Attachment = {
  onStore: function(form) {
    Kwo.exec('/account/crm/attachment.store', form, {callback:this.onStoreCallBack}); 
  },
  onRemove: function(id) {
    Kwo.exec('/account/crm/attachment.remove', {attachment_id:id}, {callback:this.onRemoveCallBack}); 
  },
  onStoreCallBack: function(h) {
    if(h.error <= 0) {
      Kwo.getDialog().close();
      Kwo.reload();
    } else {
       alert(h.result.msg);
    }
  },
  onRemoveCallBack: function(h) {
    if(h.error <= 0) {
      Kwo.reload();
    } else {
       alert(h.result.msg);
    }
  }
};
Crm.Imap = {
  onMessageView: function(elt) {
    var elt = $(elt);
    var msgno = elt.readAttribute('data-msg');
    if (elt.hasAttribute('data-subtype')) {
      var subtype = elt.readAttribute('data-subtype');
      var args = {'msgno':msgno, 'subtype': subtype};
    } else {
      var args = {'msgno':msgno};
    }
    Kwo.exec('/account/crm/message.view', args,{container:'message_holder'}); 
  },
  onSendMail: function(form) {
    $('editor1').value = CKEDITOR.instances['editor1'].getData();
    var form = $(form);
    Kwo.exec('/account/crm/desk.mail.send',[form],
             {callback:this.onSendMailCallback});
  },
  onSendMailCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.go('/account/crm/desk.sent');
    }
  },
  onSaveDraft: function(form) {
    //console.log('yo');
    $('editor1').value = CKEDITOR.instances['editor1'].getData();
    var form = $(form);
    form.insert({'top' : '<input type="hidden" name="save" value="draft" />'})
    //form.submit();
     Kwo.exec('/account/crm/desk.mail.send',[form],
             {callback:this.onSaveDraftCallback});
  },
  onSaveDraftCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.go('/account/crm/desk.draft');
    }
  },
  onAddFile: function() {
    var html = '<li>'+
               '  <div class="elt elt-file">'+
               '    <div class="elt-control">'+
               '      <input type="hidden" value="" name="attachment[]"><input type="text" class="text" onclick="new Kwo.Class.Upload(this);" readonly="readonly">'+
               '      <div class="clear"></div>'+
               '    </div>'+
               '  </div>'+
               '</li>';
    $('attachments').insert({'bottom' : html});
  },
  onEmailPickerOpen: function(elt) {
    var elt = $(elt);
    var action = '/account/crm/choose.email';
    var field = elt.readAttribute('data-field');
    new Kwo.Dialog(action,{'show_form' : 1, 'field': field},
                   {width: 600, height: 400, name: "email_picker"});
  },
  onEmailPickerFilter: function(form) {
    var form = $(form);
    var args = [form];
    Kwo.exec('/account/crm/choose.email',args,{container: 'emails'});
  },
  onEmailPickerSelect: function(elt) {
    var elt = $(elt);
    var email = elt.readAttribute('data-email');
    var field = elt.readAttribute('data-field');
    if ($(field).value.length > 0) {
      $(field).value = $(field).value + ', ' + email;
    } else {
      $(field).value = email;
    }

    Kwo.getDialog('email_picker').close();
  },
  onSelectModel: function(elt) {
    //console.log(CKEDITOR.instances);
    var elt = $(elt);
    var model_id = elt.value;
    if (model_id == 0) {
      CKEDITOR.instances.editor1.setData('');
    } else {
      Kwo.exec('/account/crm/desk.mail.model', 
               {'id' : model_id},
               {callback:Crm.Imap.onSelectModelCallback}); 
    }
    
  },
  onSelectModelCallback:function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      var model = res.result.model;
      var title = res.result.title;
      
      $('subject').value = title;
      CKEDITOR.instances.editor1.setData(model);
    }
  },
  onAccountSelect: function(elt) {
    var elt = $(elt);
    var type = 'compte';
    var action = '/account/crm/choose.'+type;
    new Kwo.Dialog(action,{'show_form' : 1, 'imap': 1},
                   {width: 600, height: 400, name: type+"_picker"});
  },
  onAccountAssign: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    var mail = $('webmail_id').value;
    Kwo.exec('/account/crm/desk.mail.assign.account',{ 'id' : id, 'webmail_id' : mail },
             {callback: Crm.Imap.onContactAssignCallback})
  },
  onAccountAssignCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.reload();
    }
  },
  onContactSelect: function(elt) {
    var elt = $(elt);
    var type = 'contact';
    var action = '/account/crm/choose.'+type;
    new Kwo.Dialog(action,{'show_form' : 1, 'imap': 1},
                   {width: 600, height: 400, name: type+"_picker"});
  },
  onContactAssign: function(elt) {
    var elt = $(elt);
    var id = elt.readAttribute('data-id');
    var mail = $('webmail_id').value;
    Kwo.exec('/account/crm/desk.mail.assign.contact',{ 'id' : id, 'webmail_id' : mail },
             {callback: Crm.Imap.onContactAssignCallback})
  },
  onContactAssignCallback: function(res) {
    if (Kwo.hasError(res)) {
      Kwo.error(res);
    } else {
      Kwo.reload();
    }
  }
};

Crm.Doc = {
  make: function(obj) {
    Kwo.exec('/account/crm/desk.document.make', obj, {callback:Crm.Doc.makeCallback});
  },
  makeCallback: function(h) {
    if(h.error > 0) {
      alert(h.result.msg);
      $('export').hide();
      return; 
    } else {
    $('snippet').update(h.result.snippet_title + '<br />' + h.result.snippet_content + '<br />');
    $('export').show();
    }
  }
};

function checkFilter() {
  var filter = $('filter').value;
  filter = filter.gsub('.','\.');
  filter = filter.gsub('(','\(');
  filter = filter.gsub(')','\)');
  var pattern = new RegExp(filter, 'i');
  if (filter == '') {
    $$('.ape-line').each(function(elt){
      elt.show();
    });
  } else {
    $$('.ape-line').each(function(elt){
      var code = elt.down().readAttribute('data-code');
      var libelle = elt.down().readAttribute('data-libelle');
      if (pattern.test(code) || pattern.test(libelle)){
        elt.show();
      } else {
        elt.hide();
      }
    });
  }
}



