/*
 *
 */
YUI().use("node", "io", "io-form", "json", "anim-color", "imageloader", "overlay", function(Y) {

  /* Update the shopping cart summary
   *
   */

  Y.on("contentready", function() {
    var tH = {
      complete: function(id, o, args) {
        var node = Y.one("#cartcontents");
        var data;
        try {
          data = Y.JSON.parse(o.responseText);
        }
        catch (e) {
          Y.log("Invalid cart data: "+o.responseText);
        }
        var s = data.cartcontent;
        var c = data.cartcount;
        node.set("innerHTML", s);
        var cartlink = Y.one("#cartlink");
        if (c === 0) {
          node.addClass("empty");
          cartlink.set("href" , "/shop/");
        }
        else {
          node.removeClass("empty");
          cartlink.set("href" , "/cart/");
        }
      }
    };
    var cfg = {
      on: {
        complete: tH.complete
      },
      context: tH
    };
    Y.io('/app/cartsummary', cfg);
  }, "#cartcontents");


  /* Toggle product promo images
   *
   */
  Y.on("contentready", function() {
    var loadPromos = function() {
      var imagepromo = [];
      var promoGroup = new Y.ImgLoadGroup({ timeLimit: 1 });
      
      for (var i=0;i<promoimages.length;i++) {
        imagepromo = promoimages[i].split("=");
        promoGroup.registerImage({
          domId: imagepromo[0],
          srcUrl: imagepromo[1]
        });
      }
    };
    loadPromos();

    function toggleShopPromo(e, obj) {
      e.halt();
      var linkId, parent, parentId, promoimages;
  
      linkId = this.get("id");
  
      parent = this.ancestor(".promoitem");
      parentId = parent.get("id");
      
      Y.all("#"+parentId+" .promoimages div").removeClass("active");
      Y.one("#"+linkId+"-large").addClass("active");
    }
    Y.on("click", toggleShopPromo, "a.promothumb");
  }, "#promolist");


  /* Update the shopping cart page
   *
   */
  Y.on("contentready", function() {
    var cartAction = function() {
      var cartform = Y.one("#cartform");
      var cartcontents = Y.one("#cartcontents");
      function updateCart(e) {
        e.halt();

        Y.all("#cartform td.quantity input").each(function(item) {
          if (this.get("value") === "") {
            this.set("value", 0);
          }
        });

        var tH = {
          complete: function(id, o) {
            var fullcart = Y.one("#fullcart");
            var data;
            // Parse the JSON data
            try {
              data = Y.JSON.parse(o.responseText);
            }
            catch (e) {
              Y.log("Invalid product data: "+o.responseText);
            }
            if (data.cart == "empty") {
              window.location="/shop/";
            }
            else {
              fullcart.set("innerHTML", data.cart);

              var s = data.cartcontent;
              var c = data.cartcount;
              cartcontents.set("innerHTML", s);
              var cartlink = Y.one("#cartlink");
              if (c === 0) {
                cartcontents.addClass("empty");
                cartlink.set("href" , "/shop/");
              }
              else {
                cartcontents.removeClass("empty");
                cartlink.set("href" , "/cart/");
              }
    
              cartAction();
            }
          }
        };
        var cfg = {
          on: {
            complete: tH.complete
          },
          context: tH,
          method: "POST",
          form: {
            id: cartform,
            useDisabled: false
          }
        };
        Y.io('/app/updatecart', cfg);
      }

      function submitCart(e) {
        e.halt();

        var tH = {
          complete: function(id, o) {
            window.location="/confirm/";
          }
        };

        var cfg = {
          on: {
            complete: tH.complete
          },
          context: tH,
          method: "POST",
          form: {
            id: cartform,
            useDisabled: false
          }
        };

        Y.io('/app/updatecart', cfg);
      }

      Y.on("submit", updateCart, cartform, this, false);
      Y.on("click", updateCart, Y.one("#updatecart"), this, false);
      Y.on("click", submitCart, Y.one("#confirmorder"), this, false);
    };
    cartAction();
  }, "#cartform");


  /* Order function for Milk and Lice
   *
   */
  Y.on("contentready", function() {
    Y.one("#firstopt").set("selected", "selected");
    var feedback = Y.one('#itemfeedback');

    function checkAvailability() {
      Y.all('#itemchoice optgroup option').each(function(sizeNode) {
        if (itemdata[sizeNode.get("value")+"-available"] === undefined) {
          sizeNode.set("disabled", true);
          sizeNode.set("innerHTML", sizeNode.get("innerHTML")+" - "+itemdata["unavailable"]);
        }
        else if (itemdata[sizeNode.get("value")+"-available"] == "unavailable") {
            sizeNode.set("disabled", true);
            sizeNode.set("innerHTML", sizeNode.get("innerHTML")+" - "+itemdata[sizeNode.get("value")+"-availabletext"]);
        }
      });
    }
    checkAvailability();
  
    function toggleChoice() {
      var choice = Y.one("#itemchoice").get("value");
  
      if (choice !== "") {
        var itemNo = itemdata[choice+"-number"];
        Y.one("#itemnumber").set("value", itemNo);
        var itemEan = itemdata[choice+"-ean"];
        Y.one("#itemean").set("value", itemEan);
        var itemColor = itemdata[choice+"-color"];
        Y.one("#itemcolor").set("value", itemColor);
        var itemColorlabel = itemdata[choice+"-colorlabel"];
        Y.one("#itemcolorlabel").set("value", itemColorlabel);
        var itemSize = itemdata[choice+"-size"];
        Y.one("#itemsize").set("value", itemSize);
        var itemSizelabel = itemdata[choice+"-sizelabel"];
        Y.one("#itemsizelabel").set("value", itemSizelabel);
//        itemColor = itemdata[choice+"-color"];
        var preview = "preview-"+itemColor;
        Y.all("#shop-item .itemimage li").removeClass("active");
        Y.one("#shop-item .itemimage #"+preview).addClass("active");
        var image = Y.one("#shop-item .itemimage #"+preview+" img").get("src");
        Y.one("#itemimage").set("value", image);
      }
    }
    Y.on("change", toggleChoice, "#itemchoice");

    var tH = {
      complete: function(ioId, o) {
        var data;
        try {
            data = Y.JSON.parse(o.responseText);
        }
        catch (e) {
            Y.log("Invalid product data: "+o.responseText);
        }
  
        var s = data.message;
        if (typeof(s) != "undefined") {
          feedback.set("innerHTML", s);
        }
  
        if (data.result == "success") {
          var cart = Y.one('#cartcontents');
          var cartcontent = data.cartcontent;
          var cartcount = data.cartcount;
          cart.set("innerHTML", cartcontent);
          var cartlink = Y.one("#cartlink");
          if (cartcount === 0) {
            cart.addClass("empty");
            cartlink.set("href" , "/shop/");
          }
          else {
            cart.removeClass("empty");
            cartlink.set("href" , "/cart/");
          }
    
          var nodecolor = feedback.getStyle('color');
          var anim = new Y.Anim({
            node: feedback,
            from: {
              color: nodecolor
            },
            to: {
              color: '#F5F5F5'
            },
            duration: 4
          });
          var onEnd = function() {
            feedback.set("innerHTML", "");
            feedback.setStyle("color", nodecolor);
          };
          anim.on('end', onEnd);
          anim.run();
        }
      }
    };

    var orderForm = Y.one("#productorder");

    var cfg = {
      on: {
        complete: tH.complete
      },
      context: tH,
      method: "POST",
      form: {
        id: orderForm,
        useDisabled: false
      }
    };
  
    function makeRequest(e) {
      e.halt();
      feedback.set("innerHTML", "Hold on...");
      Y.io('/app/orderitem', cfg);
    }

    Y.on("submit", makeRequest, orderForm);
  }, "#shop-item");


  /* Order function for Ugly
   *
   */
  Y.on("contentready", function() {
    Y.one("#firstopt").set("selected", "selected");
    var feedback = Y.one('#itemfeedback');

    function checkAvailability() {
      Y.all('#itemchoice option').each(function(sizeNode) {
/*
        if (sizeNode.get("value") === "") {
        }
        else if (itemdata[sizeNode.get("value")+"-available"] === undefined) {
*/
        if (itemdata[sizeNode.get("value")+"-available"] === undefined) {
          sizeNode.set("disabled", true);
          sizeNode.set("innerHTML", sizeNode.get("innerHTML")+" - "+itemdata["unavailable"]);
        }
        else if (itemdata[sizeNode.get("value")+"-available"] == "unavailable") {
          sizeNode.set("disabled", true);
          sizeNode.set("innerHTML", sizeNode.get("innerHTML")+" - "+itemdata[sizeNode.get("value")+"-availabletext"]);
        }
      });
    }
    checkAvailability();
  
    function toggleChoice() {
      var choice = Y.one("#itemchoice").get("value");

      if (choice !== "") {
        var itemNo = itemdata[choice+"-number"];
        Y.one("#itemnumber").set("value", itemNo);
        var itemSize = itemdata[choice+"-size"];
        Y.one("#itemsize").set("value", itemSize);
        var itemSizelabel = itemdata[choice+"-sizelabel"];
        Y.one("#itemsizelabel").set("value", itemSizelabel);
      }
  
    }
    Y.on("change", toggleChoice, "#itemchoice");
  
    var tH = {
      success: function(ioId, o) {
        var data;
        try {
            data = Y.JSON.parse(o.responseText);
        }
        catch (e) {
            Y.log("Invalid product data: "+o.responseText);
        }
  
        var s = data.message;
        if (typeof(s) != "undefined") {
          feedback.set("innerHTML", s);
        }
    
        if (data.result == "success") {
          var cart = Y.one('#cartcontents');
          var cartcontent = data.cartcontent;
          var cartcount = data.cartcount;
          cart.set("innerHTML", cartcontent);
          var cartlink = Y.one("#cartlink");
          if (cartcount === 0) {
            cart.addClass("empty");
            cartlink.set("href" , "/shop/");
          }
          else {
            cart.removeClass("empty");
            cartlink.set("href" , "/cart/");
          }
          var nodecolor = feedback.getStyle('color');
          var anim = new Y.Anim({
            node: feedback,
            from: {
              color: nodecolor
            },
            to: {
              color: '#F5F5F5'
            },
            duration: 4
          });
          var onEnd = function() {
            feedback.set("innerHTML", "");
            feedback.setStyle("color", nodecolor);
          };
          anim.on('end', onEnd);
          anim.run();
        }
      }
    };

    var orderForm = Y.one("#productorder");

    var cfg = {
      on: {
        success: tH.success
      },
      context: tH,
      method: "POST",
      form: {
        id: orderForm,
        useDisabled: false
      }
    };
  
    function makeRequest(e) {
      e.halt();
      feedback.set("innerHTML", "Hold on...");
      Y.io('/app/orderitem', cfg);
    }

    Y.on("submit", makeRequest, orderForm);
  }, "#shop-item-ugly");

  Y.on("contentready", function() {
    var confirmform = Y.one("#confirmform");
    var feedback = Y.one('#confirmmessage');

    function switchCurrency() {
      var country = Y.one("#o_country").get("value");
      if (country == "Norway") {
        Y.one("tr#ordersummary").addClass("nok");
      }
      else {
        Y.one("tr#ordersummary").removeClass("nok");
      }
    }
    switchCurrency();
    Y.on("change", switchCurrency, "#o_country");

    var tH = {
      success: function(ioId, o) {
        var data;
        try {
            data = Y.JSON.parse(o.responseText);
        }
        catch (e) {
            Y.log("Invalid product data: "+o.responseText);
        }
  
        if (data.result == "success") {
          window.location="/checkout/";
        }
  
        else if (data.result == "error") {
          Y.one("#confirmform tr.action").addClass("error");
          feedback.set("innerHTML", data.message);
          if (data.name_error == "true") {
            Y.one("#confirmform tr.name").addClass("error");
          }
          if (data.address_error == "true") {
            Y.all("#confirmform tr.address").addClass("error");
          }
          if (data.zip_error == "true") {
            Y.one("#confirmform tr.zip").addClass("error");
          }
          if (data.city_error == "true") {
            Y.one("#confirmform tr.city").addClass("error");
          }
          if (data.country_error == "true") {
            Y.one("#confirmform tr.country").addClass("error");
          }
          if (data.email_error == "true") {
            Y.one("#confirmform tr.email").addClass("error");
          }
        }
      }
    };

    var cfg = {
      on: {
        success: tH.success
      },
      context: tH,
      method: "POST",
      form: {
        id: confirmform,
        useDisabled: false
      }
    };
  
    function makeRequest(e) {
      e.halt();
      feedback.set("innerHTML", "Hold on...");
      Y.all("#confirmform tr.error").removeClass("error");
      Y.io('/app/confirm', cfg);
    }

    Y.on("submit", makeRequest, confirmform, this, false);
    Y.on("click", makeRequest, Y.one("#submitorder"), this, false);
  }, "#confirmform");


  /* Toggle gallery item details
   *
   */
  Y.on("contentready", function() {
    function toggleGalleryItemDetails(e, obj) {
      e.halt();
      var choice = this.get("value");
      var item = this.get('parentNode').get('parentNode');

      var images = item.all('img');
      images.removeClass("active");
      Y.one("#image-"+choice).addClass("active");

      var links = item.all('p');
      links.removeClass("active");
      Y.one("#links-"+choice).addClass("active");
    }
    Y.on("change", toggleGalleryItemDetails, "#uccgallery .item select");
  }, "#uccgallery");

  /* Toggle retailer options
   *
   */
  Y.on("contentready", function() {
    function toggleValue(e, obj) {
      e.halt();
      var checked = this.get("checked");
      if (checked === true) {
        this.set("value", "yes");
      }
      else {
        this.set("value", "no");
      }
    }
    Y.on("change", toggleValue, "#retaileraccount input.retailertype");


    Y.all('#retailer_country option').each(function(option) {
      if (option.get("value") == retailercountry) {
        option.set("selected", true);
      }
    });
  }, "#retaileraccount");


  /* Verify retailer registration form
   *
   */
  Y.on("contentready", function() {
    var regform = Y.one("#member_form");
    function checkForm(e, obj) {
      e.halt();

      var tH = {
        complete: function(id, o) {
          var data;
          try {
            data = Y.JSON.parse(o.responseText);
          }
          catch (e) {
            Y.log("Invalid data: "+o.responseText);
          }
  
          if (data.result == "error") {
            Y.all("#member_form label.error").removeClass("error");

            if (data.name_error == "true") {
              Y.one("#label_name").addClass("error");
            }
            if (data.storename_error == "true") {
              Y.one("#label_storename").addClass("error");
            }
            if (data.email_error == "true") {
              Y.one("#label_email").addClass("error");
            }
            if (data.password_error == "true") {
              Y.one("#label_password").addClass("error");
            }
            if (data.contact_error == "true") {
              Y.one("#label_contact").addClass("error");
            }
            if (data.phone_error == "true") {
              Y.one("#label_phone").addClass("error");
            }
          }
          else {
            regform.submit();
          }
        }
      };
      var cfg = {
        on: {
          complete: tH.complete
        },
        context: tH,
        method: "POST",
        form: {
          id: regform,
          useDisabled: false
        }
      };
      Y.io('/app/checkregform', cfg);

    }
    Y.on("submit", checkForm, "#member_form");
  }, "#member_form");


  /* Shipping overlay
   *
   */
  Y.on("contentready", function() {

    var link = Y.one("#shippinglink a");
    var overlay = new Y.Overlay({
        zIndex: 2
    });
    overlay.render("#shippinglink");

    function showRates(e, obj) {
      e.halt();
      Y.one("#shippingoverlay").addClass("active");
      Y.detach("click", showRates, link);
      Y.on("click", hideRates, link);
    }

    function hideRates(e, obj) {
      e.halt();
      Y.one("#shippingoverlay").removeClass("active");
      Y.detach("click", hideRates, link);
      Y.on("click", showRates, link);
    }

    Y.on("click", showRates, link);
    Y.on("click", hideRates, "#shippingoverlay");
  }, "#shippingoverlay");



  /* Retailer order
   *
   */
  Y.on("contentready", function() {

    var orderform = Y.one("#retailerorder");
    function checkOrder(e, obj) {
      e.halt();

        var tH = {
          complete: function(id, o) {
            var result = o.responseText;
            if (result == "success") {
              Y.one("#retailerorderconfirm").addClass("active");
              orderform.remove();
            }
          }
        };

        var cfg = {
          on: {
            complete: tH.complete
          },
          context: tH,
          method: "POST",
          form: {
            id: orderform,
            useDisabled: false
          }
        };

        Y.io('/app/checkretailerorder', cfg);
      }

    Y.on("submit", checkOrder, orderform, this, false);

    var rowClass = "odd";
    Y.all('#retailerorder tbody tr').each(function(row) {
      row.addClass(rowClass);
      if (rowClass == "even") {
        rowClass = "odd";
      }
      else {
        rowClass = "even";
      }
    });

  }, "#retailerorder");


  function checkAdmin() {
    var isadmin = "false";
    if (Y.one(document.body).hasClass("admin"))
    {
      isadmin = "true";
    }
    else
    {
      isadmin = "false";
    }

    var tH = {
      complete: function(id, o, args) {
        return;
      }
    };
    var cfg = {
      on: {
        complete: tH.complete
      },
      context: tH
    };
    Y.io('/app/check/'+isadmin, cfg);
  }
  checkAdmin();

  var initUglyColorFilter = function(e) {
    var links = Y.all('.shopheader ul.colors a');
    var articles = Y.all('#promolist article');
    var color;

    var toggleColors = function(e) {
      e.preventDefault();
      links.removeClass("active");
      this.addClass("active");
      color = this.get("rel");
      if (color === "all") {
        articles.removeClass("hidden");
      }
      else {
        articles.addClass("hidden");
        Y.all("#promolist article."+color).removeClass("hidden");
      }
    }
    Y.on("click", toggleColors, links);
  };
  Y.on("available", initUglyColorFilter, "#promolist.ugly");

  var initProductImageNav = function(e) {
    var links = Y.all('nav.prodimagenav a');
    var images = Y.all('.images ul li');

    var toggleImages = function(e) {
      e.preventDefault();
      var showImage;
      var direction = this.get("rel");

      activeImage = Y.one('.images li.active');

      if (direction === "previous") {
        showImage = activeImage.previous();
      }
      else if (direction === "next") {
        showImage = activeImage.next();
      }
      if (showImage !== null) {
        images.removeClass("active");
        showImage.addClass("active");
        if (showImage.next() === null) {
          Y.one('nav.prodimagenav a.next').addClass("disabled");
        }
        else {
          Y.one('nav.prodimagenav a.next').removeClass("disabled");
        }
        if (showImage.previous() === null) {
          Y.one('nav.prodimagenav a.previous').addClass("disabled");
        }
        else {
          Y.one('nav.prodimagenav a.previous').removeClass("disabled");
        }
      }
    }
    Y.on("click", toggleImages, links);
  };
  Y.on("available", initProductImageNav, "nav.prodimagenav");

  var initStoreMapForm = function() {
    Y.log("before");
    Y.log(storeaddress);
//    showAddress(storeaddress);
    Y.log("after");
//    Y.one("#storeMapForm").submit().return(false);
    return false;
  };
  Y.on("available", initStoreMapForm, "#storeMapForm");



  /* Set items height
   *
   */
  var setItemHeights = function() {
    var items = Y.all(this+' article');
    var newheight = 0, itemheight;
    items.each(function(item) {
      itemheight = parseInt(item.getComputedStyle("height"), 10);
      if (itemheight > newheight) {
        newheight = itemheight;
      }
    });
    if (newheight > 0) {
      items.setStyle("height", newheight+"px");
    }
  };
  Y.on("available", setItemHeights, ".promolist", ".promolist");

});

