var UAD = {};

// Display --------
UAD.Display = {
  "init": function() {
    if (Prototype.Browser.IE) {
      var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, "");
      if (rslt != null && Number(rslt[1]) >= 5.5 && Number(rslt[1]) < 7) {
        $$('.png').each(UAD.Display.alphaBackgrounds);
        $$("img.png, input.png").each(UAD.Display.fnLoadPngs);
      }
      $$('.clear').each(function(el) {
        el.update('&nbsp;')
      });
    }
  },
  "alphaBackgrounds": function(e) {
    var bg = e.currentStyle.backgroundImage;
    if (bg.match(/\.png/i) != null) {
      var mypng = bg.substring(5,bg.length-2);
      e.setStyle({
        filter : "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + mypng + "', sizingMethod='" + (e.currentStyle.backgroundRepeat == "no-repeat" ? "crop" : "scale") + "')",
        backgroundImage : "none"});
    }
  },
  "fnLoadPngs": function(img) {
    if (img.src.match(/\.png$/i) != null) {
      var src = img.src;
      var div = document.createElement("DIV");
      div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')";
      div.style.width = img.width + "px";
      div.style.height = img.height + "px";
      img.replaceNode(div);
    }
  },
  "rollOver": function(way, el) {
    var img = $(el);
    if(way == 'over') img.writeAttribute('src', '/app/uad/pix/menu/menu-'+ img.readAttribute('name') +'-active.jpg');
    else img.writeAttribute('src', '/app/uad/pix/menu/menu-'+ img.readAttribute('name') +'.jpg');
  }
};


// Panier --------
UAD.Panier = {
  "item_key": null,
  "quantity": null,
  "options": null,
  "view": function() {
    Kwo.go("/achat.panier");
  },
  "addAchat": function(item_key, quantity, options) {
    UAD.Panier.item_key = item_key;
    UAD.Panier.quantity = quantity;
    UAD.Panier.options = options;
    Kwo.exec("/shop/cart.purchase.add",
             {"item_key":item_key, "quantity":quantity || 1, "options":options},
             {"callback": UAD.Panier.onAchatCallback});
  },
  "onAchatCallback": function(res) {
    if(Kwo.hasError(res)) {
      alert(res.result.msg);
    }
    UAD.Panier.updateWidget();
    UAD.Panier.addConfirmModal(UAD.Panier.item_key,
                               UAD.Panier.quantity,
                               UAD.Panier.options);
  },
  "addConfirmModal": function(item_key, quantity, options) {
    new Kwo.Dialog('/modal.cart.add',
                   {'item_key':item_key, 'quantity':quantity, 'options':options},
                   {'height':300,'width':600});
  },
  "update": function(el) {
    var form = el.up('form');
    Kwo.exec("/shop/cart.update", form, {"callback": UAD.Panier.onPanierUpdate});
  },
  "empty": function(arg) {
    Kwo.exec("/panier.empty", null, {"callback": UAD.Panier.onPanierUpdate, "confirm": arg});
  },
  "onPanierUpdate": function(res) {
    var args = {};
    if(Kwo.hasError(res)) {
      var a = res.result.msg[0].split(' | ');
      args["error_id"] = a[0];
    }
    Kwo.exec('/panier', args, {'container':'cart-view'});
  },
  "updateWidget": function() {
    if($("basket")) {
      Kwo.exec("/block.panier", null, {'container':'basket'});
    }
  },
  "incrementQty": function(input_id) {
    $(input_id).value = parseInt($(input_id).value) + 1;
    UAD.Panier.update($(input_id));
    UAD.Panier.updateWidget();
  },
  "decrementQty": function(input_id) {
    if($(input_id).value > 1) {
      $(input_id).value = parseInt($(input_id).value) - 1;
      UAD.Panier.update($(input_id));
      UAD.Panier.updateWidget();
    }
    else {
      UAD.Panier.deleteConfirmModal(input_id);
    }
  },
  'deleteCompletedModal': function(purchase_id) {
    new Kwo.Dialog('/modal.cart.removed',
                   {'purchase_id':purchase_id},
                   {'height':300,'width':600});
    UAD.Panier.updateWidget();
  },
  "deleteConfirmModal": function(input_id) {
    new Kwo.Dialog('/modal.cart.remove',
                   {'input_id':input_id},
                   {'height':300,'width':600});
  },
  "deletePurchase": function(input_id, purchase_id) {
    $(input_id).value = 0;
    UAD.Panier.update($(input_id));
    if(Kwo.getDialog()) {
      Kwo.getDialog().close();
    }
    UAD.Panier.deleteCompletedModal(purchase_id);
  },
  "detailModal": function(purchase_id) {
    new Kwo.Dialog('/modal.pdt',
                   {'purchase_id':purchase_id},
                   {'height':500,'width':700});
  },
  "deleteCoupon": function() {
    Kwo.exec("/order.remove.coupon", null, {"callback": UAD.Panier.onPanierUpdate});
  },
  "reload": function(res) {
    if (res["result"]["err_coupon"] == 1) {
      $('err-coupon').show();
      return false;
    }
    else {
      Kwo.exec('/panier', null, {'container':'cart-view', 'callback':function(res) {
        if(Kwo.hasError(res)) {
          alert(res.result.msg);
        }

        if($('shipping_method1').getValue() == 1) {
          $('sel_pc').focus();
        }
        else {
          $('sel_wh').focus();
        }
      }});
    }
  },
  "selectLivraison": function() {
    $('shipping_method1').checked = true;
  },
  "selectEntrepot": function() {
    $('shipping_method2').checked = true;
  },
  "livraisonAddrToggle": function() {
    $('panel-facturation').toggle();
    if($('panel-facturation').visible()) {
      $('panel-livraison').setStyle({'width':'49%'});
    }
    else {
      $('panel-livraison').setStyle({'width':'80%'});
    }
  }
};


// Order --------
UAD.Order = {
  "elt": null,
  "fromCartUpdate": function(el) {
    UAD.Order.elt = $(el);
    var form = el.up('form');
    Kwo.exec("/order.update", form, {"callback": UAD.Panier.reload});
  },
  "storeAddresses": function(el) {
    var errors = 0;
    $$('.input-verif').each(function(el) {
      el = $(el);
      if(el.value.blank() || UAD.Form.checkElt(el)) {
        el.next('div.form-error', 0).show();
        el.addClassName('error');
        errors++;
      }
    });
    if(errors > 0) { return false; }
    Kwo.exec('/addressee.store', el, {'callback':UAD.Order.storeAdressesCallback})
  },
  "storeAdressesCallback": function(res) {
    if(Kwo.hasError(res)) {
      return false;
    }
    else {
      Kwo.go('/achat.recap');
    }
  },
  "compose": function() {
    Kwo.go("/achat.livraison");
  },
  "finalize": function() {
    Kwo.go("/achat.paiement");
  }
};


// Payment --------
UAD.Payment = {
  "btn": null,
  "load": function(el) {
    UAD.Payment.btn = $(el);
    if (!UAD.Payment.btn.disabled) {
      UAD.Payment.btn.disabled = true;
      Kwo.exec('/order.payment.fork', UAD.Payment.btn, {'container':'payment'});
    }
  }
};


// Carousel --------
UAD.Carousel = {
  "cell_width": 130 + 6 + 6,
  "left_pos_limit": 0,
  "left": function() {
    var left_pos = parseInt($('carousel-list').getStyle('left'));
    if(left_pos < UAD.Carousel.left_pos_limit) {
      $('carousel-list').setStyle({ left: (left_pos + UAD.Carousel.cell_width)+"px"});
    }
  },
  "right": function() {
    var right_pos = parseInt($('carousel-list').getStyle('left'));
    var right_pos_limit = ($('carousel-list').childElements().length - 5) * UAD.Carousel.cell_width * -1;
    if(right_pos > right_pos_limit) {
      $('carousel-list').setStyle({ left: (right_pos - UAD.Carousel.cell_width)+"px"});
    }
  }
};


// Produit --------
UAD.Produit = {
  "getInfo": function(produit_id, att) {
    Kwo.exec("/block.pdt.infos", {'id':produit_id, 'att':att}, {'container':'pdt-infos-box'});
  },
  "cartIncrementQty": function(input_id) {
    $(input_id).value = parseInt($(input_id).value) + 1;
  },
  "cartDecrementQty": function(input_id) {
    if($(input_id).value > 1) {
      $(input_id).value = parseInt($(input_id).value) - 1;
    }
  },
  "toggleSidebarInfo": function(id) {
    var title = $$('#'+id+' .title')[0];
    var content = $$('#'+id+' .content')[0];
    var arrow = $$('#'+id+' .arrow img')[0];

    if(title.hasClassName('inactive')) {
      title.removeClassName('inactive');
      title.addClassName('active');
      arrow.writeAttribute('src', '/app/uad/pix/btn/btn-arrow-down.png');
      content.show();
    }
    else {
      title.removeClassName('active');
      title.addClassName('inactive');
      arrow.writeAttribute('src', '/app/uad/pix/btn/btn-arrow-right.png');
      content.hide();
    }
  }
};


// Personnalisation --------
UAD.Perso = {
  "produit_id": null,
  "updatePanel": function(produit_id, root, path) {
    UAD.Perso.produit_id = produit_id;
    Kwo.exec("/block.customiser", {'id':produit_id, 'root':root, 'path':path}, {'container':'customizer', 'callback':UAD.Perso.updatePanelCallback});
  },
  "updatePanelCallback": function(res) {
    Kwo.exec("/service.s7", {'id':UAD.Perso.produit_id}, {'callback':function(res) {
      UAD.Perso.updateImage(res["result"]["image_url"]);
    }});
    Kwo.exec("/service.mpn", {'id':UAD.Perso.produit_id}, {'callback':function(res) {
      UAD.Perso.bookmarkMPN(res["result"]["bookmark_mpn"]);
      UAD.Perso.printMPN(res["result"]["mpn"]);
    }});
    UAD.Perso.updateSidebar(UAD.Perso.produit_id);
  },
  "printMPN": function(mpn) {
    $$(".product-print-button")[0].writeAttribute("href", "/produit.print/-/id/"+UAD.Perso.produit_id+"?mpn="+mpn);
  },
  "bookmarkMPN": function(mpn) {
    $$(".kwo-bookmark-button")[0].writeAttribute("data-url", mpn);
  },
  "toggleOptionPrice": function(el) {
    var el = $(el);
    var price = el.up('div').down('.price');
    price.toggle();
  },
  "updateSidebar": function(produit_id) {
    Kwo.exec("/block.pdt.tarifs", {'id':produit_id}, {'container':'product-tarif-box'});
  },
  "updateImage": function(url) {
    $('s7-image').writeAttribute('src', url);
  },
  "modal360": function(produit_id) {
    new Kwo.Dialog('/modal.pdt.360',
                   {'produit_id':produit_id, 'mpn':$$('.kwo-bookmark-button')[0].readAttribute('data-url')},
                   {'width':870,'height':620});
  },
  "modalZoom": function(produit_id) {
    new Kwo.Dialog('/modal.pdt.zoom',
                   {'produit_id':produit_id, 'mpn':$$('.kwo-bookmark-button')[0].readAttribute('data-url')},
                   {'width':740,'height':620});
  }
};


// F.A.Q --------
UAD.Faq = {
  "toggleAnswer": function(id) {
    var toggle = $$('#'+id+' .answer-toggle')[0];
    var answer = $$('#'+id+' .answer')[0];
    if(!answer.visible()) {
      toggle.hide();
      answer.show();
    }
    else {
      toggle.show();
      answer.hide();
    }
  }
};


// Vote --------
UAD.Vote = {
  "zoom": function(id) {
    var zoom = $(id);
    zoom.addClassName('active');
    $$('.vote-zoom').each(function(elt) {
      if (elt != zoom ) { elt.hide(); }
    });
    zoom.setStyle({zIndex:50});
    zoom.show();
  },
  "close": function(id) {
    var zoom = $(id);
    zoom.removeClassName('active');
    zoom.hide();
    zoom.setStyle({zIndex:1});
  }
};


// Creation --------
UAD.Creation = {
  "getInfo": function(creation_id, att) {
    Kwo.exec("/block.crea.infos", {'id':creation_id, 'att':att}, {'container':'crea-infos-box'});
  }
};


// Parrainage --------
UAD.Parrainage = {
  "add": function(email) {
    $('gd-email').clear();
    Kwo.exec("/service.godson", {'email':email}, {'callback':function(res) {
      var list = $('godsons-list');
      list.insert({bottom : res['result']["html"]});
    }});
  },
  "remove": function(el) {
    var el = $(el);
    el.up('.godson-email').remove();
  }
};


// Rating --------
UAD.Rating = {
  "onThumb": function(elt, direction) {
    elt = $(elt);
    var args = {};
    args["item_key"] = elt.readAttribute("data");
    args["direction"] = direction;
    Kwo.exec("/rating/thumb", args, {'callback': UAD.Rating.onThumbCallback.bind(elt)});
  },
  "onThumbCallback": function(res) {
    if (Kwo.hasError(res)) return Kwo.error(res);
    var label = $$('#vote-box .center div.callback_msg')[0];
    label.update(res["result"]["callback_msg"]);
    $('thumb-result').update(res["result"]["vote"]);
  }
};

// Membre --------
UAD.Membre = {
  onProfileSave: function(elt) {
    if (!UAD.Form.checkRequiredElts()) {
      return false;
    }
    elt = $(elt);
    Kwo.exec("/account/uad/profile.save", elt, {disable:true, callback:true});
  },
  onPrecisionsSave: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/uad/precisions.save", elt, {disable:true, callback:true});
  },
  onDesignerSave: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/uad/designer.save", elt, {disable:true, callback:true});
  },
  onEntrepriseSave: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/uad/entreprise.save", elt, {disable:true, callback:true});
  },
  onCreationSave: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/uad/designer.furniture.save", elt, {disable:true, callback:true});
  },
  onCreationRemove: function(elt) {
    elt = $(elt);
    Kwo.exec("/account/uad/designer.creation.remove", {'id': elt.readAttribute("data-id")},
             {confirm:elt, callback:true});
  },
  onSponsorshipRemove: function(id) {
    Kwo.exec("/account/uad/sponsorship.remove", {'id':id}, {callback:true});
  }
};


// Contact --------
UAD.Contact = {
  onCallback: function(res) {
    if (Kwo.hasError(res)) return Kwo.error(res);
    this.reset();
    this.down(".button-box").update(res["result"]["callback_msg"]);
  },
  onFaqSelect: function(elt) {
    elt = $(elt);
    if (elt.getValue() == 0) {
      $("faq-questions").update('<option value="0">--</option>');
      $("faq-answer").hide();
      return ;
    }
    var args = {"id": elt.getValue(),
                "top": "0:--",
                "bottom": "-1:Aucune question ne correspond à ma demande"}
    Kwo.exec("/faq/questions", args, {callback: $("faq-questions")});

  },
  onQuestionSelect: function(elt) {
    elt = $(elt);
    if (elt.getValue() == 0) {
      return ;
    }
    else if (elt.getValue() == -1) {
      $("faq-answer").hide();
      $$(".contact-form")[0].show();
      return;
    }
    $$(".contact-form")[0].hide();
    $("answer-content").update().show();
    $("faq-answer").show();
    Kwo.exec("/faq/answer", {"id": elt.getValue()},
             {callback: $("answer-content")});
  },
  onSubmit: function(elt) {
    elt = $(elt);
    Kwo.exec("/uad/contact.send", [elt, {"faq_id": $("faq-select").getValue()}],
             {disable:elt, callback: UAD.Contact.onCallback.bind(elt)});
  }
};


// Form control --------
UAD.Form = {
  "checkRequiredElts": function(){
    var inputs = $$('.input-verif');
    errors = 0;
    inputs.each(function(el) {
      el = $(el);
      if(UAD.Form.checkElt(el) || el.value == '') { errors++; }
    });
    return (errors > 0) ? false : true;
  },
  "check": function(elt) {
    elt = $(elt);
    var value = elt.value;
    var error_div = elt.next('div.form-error', 0);
    var has_error = UAD.Form.checkElt(elt);
    if (value.blank()) { has_error = true; }
    if (has_error === true) {
      error_div.show();
      elt.addClassName('error');
    }
    else {
      error_div.hide();
      if(elt.hasClassName('error')) { elt.removeClassName('error'); }
    }
  },
  "checkNoEmpty": function(elt) {
    elt = $(elt);
    var value = elt.value;
    var error_div = elt.next('div.form-error', 0);
    var has_error = (UAD.Form.checkElt(elt) && elt.value != '');

    if (has_error === true) {
      error_div.show();
      elt.addClassName('error');
    }
    else {
      error_div.hide();
      if(elt.hasClassName('error')) { elt.removeClassName('error'); }
    }
  },
  "checkElt": function(elt) {
    elt = $(elt);
    var control_type = elt.readAttribute('data-control-type');
    var value = elt.value;
    var has_error = false;
    switch (control_type) {
      case 'txt': has_error = UAD.Form.checkText(value); break;
      case 'cp': has_error = UAD.Form.checkPostalCode(value); break;
      case 'phone': has_error = UAD.Form.checkPhone(value); break;
      case 'alphanum': has_error = UAD.Form.checkAlphaNum(value); break;
      case 'email': has_error = UAD.Form.checkEmail(value); break;
      case 'pwd': has_error = UAD.Form.checkPwd(value); break;
      case 'name': has_error = UAD.Form.checkNames(value); break;
      case 'empty': has_error = UAD.Form.checkEmpty(value); break;
    }
    return has_error;
  },
  "checkPostalCode": function(str) {
    var expr = new RegExp("^[0-9]{5}$");
    if (expr.test(str)) return false;
    return true;
  },
  "checkPhone": function(str) {
    var expr = new RegExp("^[0-9]{10,14}$");
    if (expr.test(str)) return false;
    return true;
  },
  "checkText": function(str) {
    var expr = new RegExp("^[A-Za-z0-9_\-]{3,30}$");
    if (expr.test(str)) return false;
    return true;
  },
  "checkAlphaNum": function(str) {
    var expr = new RegExp("[a-zA-Z0-9]");
    if (expr.test(str)) return false;
    return true;
  },
  "checkEmail": function(str) {
    var expr = new RegExp("^[a-z0-9.+_-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$");
    if (expr.test(str)) return false;
    return true;
  },
  "checkPwd": function(str) {
  	var expr = new RegExp("^[A-Za-z0-9!@#$%=^&*()_+]{6,20}$");
  	if (expr.test(str)) return false;
    return true;
  },
  "checkNames": function(str) {
  	var expr = new RegExp("^[a-zA-Z0-9\ _éèêëàâîïûü-]{2,30}$");
  	if (expr.test(str)) return false;
    return true;
  },
  "checkEmpty": function(str) {
    return str.blank();
  }
};


UAD.Dialog = {
  "escapeHandler": function(event) {
    if(Kwo.getDialog()) {
      if(event.keyCode == Event.KEY_ESC) {
        Kwo.getDialog().close();
      }
      else if(event.keyCode == 32) {
        Kwo.getDialog().place();
        event.stopPropagation();
      }
    }
  }
};


document.observe("dom:loaded", function() {
  setTimeout(UAD.Display.init, 100);
});