$(document).ready(function(){ var FEEDBACK_GENERAL_ERROR = "feedback-general-error"; var FEEDBACK_LOGIN_REQUIRED = "feedback-login-required"; var FEEDBACK_ADD_CART_SUCCESS = "feedback-add-cart-success"; var FEEDBACK_REMOVE_CART_SUCCESS = "feedback-remove-cart-success"; var FEEDBACK_UPDATE_CART_SUCCESS = "feedback-update-cart-success"; var FEEDBACK_ADD_WISHLIST_SUCCESS = "feedback-add-wishlist-success"; var FEEDBACK_REMOVE_WISHLIST_SUCCESS = "feedback-remove-wishlist-success"; var FEEDBACK_UPDATE_CART_QTY_SUCCESS = "feedback-update-cart-qty-success"; var FEEDBACK_MYCART_UPDATE_ERROR = "feedback-mycart-update-error"; var FEEDBACK_WISHLIST_UPDATE_ERROR = "feedback-wishlist-update-error"; var FEEDBACK_MYPURCHASE_CANCEL_ORDER_SUCCESS = "feedback-mypurchase-cancel-order-success"; var SHOW_LOADING_DELAY = 1000; var $html = $("html"); var $body = $("body"); var $headerBar = $("#header-bar"); function ajaxPost(url, data, success, error){ ajaxSend("POST", url, data, success, error); } function ajaxGet (url, data, success, error){ ajaxSend("GET" , url, data, success, error); } function ajaxSend(method, url, data, success, error){ $.ajax({ type : method, url : url, data : data, success : success, dataType: "text" }).fail(error); } function addHeaderCartCounter(value){ addHeaderCounter("mycart", value); } function updateHeaderCartCounter(value){ updateHeaderCounter("mycart", value); } function getHeaderCounter(key){ var $item = $headerBar.find(".header-bar-item-"+key); var $num = $item.find(".header-bar-item-button-num"); if($num.length == 0){ return 0; } return parseInt($num.find(".header-bar-item-button-num-wrapper").text()); } function addHeaderCounter(key, num){ var counter = getHeaderCounter(key); updateHeaderCounter(key, counter + num); } function updateHeaderCounter(key, num){ var $item = $headerBar.find(".header-bar-item-"+key); var $num = $item.find(".header-bar-item-button-num"); if(num == 0){ $num.remove(); }else{ if($num.length == 0){ $num = $("
"); var $wrapper = $("
"); $wrapper.text(num); $num.append($wrapper); $item.find(".header-bar-item-button").append($num); }else{ $num.find(".header-bar-item-button-num-wrapper").text(num); } } } function appendLoading($parent){ var spinner = $parent.data("spinner"); if(spinner == null){ var opt = { color : "#e18078", //color: "#ffffff", zIndex: "auto" //shadow: true }; spinner = new Spinner(opt).spin(); $parent.data("spinner",spinner); $parent.append($(spinner.el)); }else{ spinner.spin(); } } function removeLoading($parent){ var spinner = $parent.data("spinner"); if(spinner == null) return; spinner.stop(); } function isLogged(){ return $body.hasClass("logged"); } function productAction(url, data, successFeedback, errorFeedback, successCallback, errorCallback){ function success(response){ if(response == "1"){ log("success"); hideModalLoading(); if(isBlank(successFeedback)){ if(successCallback != null){ successCallback(response); } }else{ feedback(successFeedback, function(){ if(successCallback != null){ successCallback(response); } }); } }else{ error(response); } } function error(response){ log("error"); log(response); hideModalLoading(); if(isBlank(errorFeedback)){ if(errorCallback != null){ errorCallback(response); } }else{ feedback(errorFeedback, function(){ if(errorCallback != null){ errorCallback(response); } }); } } showModalLoading(); //return; if(SHOW_LOADING_DELAY>0){ setTimeout(function(){ ajaxPost(url, data, success, error); }, SHOW_LOADING_DELAY); }else{ ajaxPost(url, data, success, error); } } function myAjaxPost(url, data, success, error){ if(SHOW_LOADING_DELAY>0){ setTimeout(function(){ ajaxPost(url, data, success, error); }, SHOW_LOADING_DELAY); }else{ ajaxPost(url, data, success, error); } } // call from product function removeProductFromWishlistByProductId(product_id, successCallback, errorCallback){ log("removeProductFromWishlist"); var url = "xml/removeProductFromWishlist.php"; var data = {product_id:product_id}; productAction(url, data, "", "", successCallback, errorCallback); } function removeProductFromWishlistById(id, successCallback, errorCallback){ log("removeProductFromWishlist"); var url = "xml/removeProductFromWishlist.php"; var data = {id:id}; productAction(url, data, "", "", successCallback, errorCallback); } function addProductToWishlistByProductId(product_id, successCallback, errorCallback){ log("addProductToWishlist"); var url = "xml/addProductToWishlist.php"; var data = {product_id:product_id}; productAction(url, data, "", FEEDBACK_GENERAL_ERROR, successCallback, errorCallback); } function addProductToCart(productID, colorID, sizeID, successCallback, errorCallback){ log("addProductToCart"); var url = "xml/addProductToCart.php"; var data = {id:productID, color:colorID, size:sizeID}; productAction(url, data, "", FEEDBACK_GENERAL_ERROR, successCallback, errorCallback); } function updateCart(cartItemID, productID, colorID, sizeID, qty,successCallback, errorCallback){ log("updateCart"); var url = "xml/updateProductToCart.php"; var data = {id:productID, cart_id:cartItemID, color:colorID, size:sizeID, qty:qty}; productAction(url, data, "", FEEDBACK_GENERAL_ERROR, successCallback, errorCallback); } // call from mycart function removeProductFromCart(cartItemID, successCallback, errorCallback){ log("removeProductFromCart"); var url = "xml/removeProductFromCart.php"; var data = {cart_id:cartItemID}; productAction(url, data, "", "", successCallback, errorCallback); } function updateCartQty(cartItemID, qty, successCallback, errorCallback){ log("updateCartQty"); var url = "xml/updateCartQty.php"; var data = {cart_id:cartItemID, qty:qty}; productAction(url, data, "", "", successCallback, errorCallback); } function getMemberDiscount(amount, success, error){ var url = "xml/getMemberDiscount.php"; var data = {amount:amount}; if(SHOW_LOADING_DELAY > 0){ setTimeout(function(){ ajaxPost(url, data, success, error); }, SHOW_LOADING_DELAY); }else{ ajaxPost(url, data, success, error); } } function showModalLoading(){ var $loading = $(""); var options = { noClose : true, noPadding : true, noBoxShadow : true, noBackground: true }; overlay($loading); appendLoading($loading); /* var $loading = $(""); var options = {noClose:true, noPadding:true}; lightbox($loading, options); */ } function hideModalLoading(){ removeLoading($("#modal-loading")); unmodal(); } function modal(){ var $modal = $("
"); $body.append($modal).addClass("modal"); return $modal; /* var $clickable = $(""); $modal.append($clickable).append($stuff); $body.append($modal).addClass("modal"); if(click != null){ $clickable.click(click); } */ } function unmodal(callback){ $("#modal").remove(); $body.removeClass("modal"); if(callback != null){ callback(); } } function overlay($panel){ lightbox($panel, false, false, false); } function lightboxFrame($panel, afterClosed){ lightbox($panel, false, false, true, afterClosed); } function lightboxWindow($panel, afterClosed){ lightbox($panel, true, true, true, afterClosed); } function lightboxMessageNoClose($panel){ lightbox($panel, true, false, false); } function lightboxMessage($panel, afterClosed){ lightbox($panel, true, false, true, afterClosed); } function lightbox($panel, withStyle, withPadding, withClose, afterClosed){ function onClose(){ lightbox_close(afterClosed); } var $modal = modal(); var $table = $(""); $table.hide(); var $cell = $(""); var $win = $(""); $win.append($panel); if(withStyle == true){ $win.addClass("lightbox-window-with-style"); } if(withPadding == true){ $win.addClass("lightbox-window-with-padding"); } $cell.append($win); $table.append($cell); $modal.append($table); // if(withClose == true){ var $close = get_lightbox_close_button(); $close.click(onClose); if(withPadding == true){ $win.addClass("lightbox-window-with-close-button"); } $win.append($close); var $clickable1 = $(""); var $clickable2 = $(""); $clickable1.click(onClose); $clickable2.click(onClose); $modal.prepend($clickable1); $cell.prepend($clickable2); } // $table.fadeIn(); } /* function lightbox($panel, options, afterClosed){ function onClose(){ lightbox_close(afterClosed); } var $modal = modal(); var $table = $(""); $table.hide(); var $cell = $(""); var $win = $(""); $win.append($panel); if(options){ if(options.noPadding){ $win.addClass("lightbox-window-no-padding"); } if(options.noBoxShadow){ $win.addClass("lightbox-window-no-box-shadow"); } if(options.noBackground){ $win.addClass("lightbox-window-no-background"); } } if(options && options.noClose){ }else{ var $close = get_lightbox_close_button(); $close.click(onClose); $win.addClass("lightbox-window-with-close-button").append($close); var $clickable1 = $(""); var $clickable2 = $(""); $clickable1.click(onClose); $clickable2.click(onClose); $modal.append($clickable1); $cell.append($clickable2); } $cell.append($win); $table.append($cell); $modal.append($table); $table.fadeIn(); }*/ function get_lightbox_close_button(){ return $(""); } function lightbox_close(callback){ var $modal = $("#modal"); if($modal.length == 0) { if(callback != null){ callback(); } return; } $modal.find(".lightbox-table").fadeOut("fast", function(){ unmodal(callback); }); } function getFeedbackMessagePanel(text){ var $wrapper = $("
"); var $div = $("
"); $wrapper.append($div); $div.text(text); return $wrapper; } function getFeedbackMessage(key){ return $("#"+key).text(); } function feedback(key, afterClosed){ feedbackMessage(getFeedbackMessage(key), afterClosed); } function feedbackMessage(text, afterClosed){ //var $wrapper = $("
"); //var $div = $("
"); //$wrapper.append($div); //$div.text(text); lightboxMessage(getFeedbackMessagePanel(text), afterClosed); } function requireLogin(){ var text = $("#"+FEEDBACK_LOGIN_REQUIRED).text(); var $wrapper = $("
"); var $div = $("
"); $wrapper.append($div); $div.text(text); var $button = $(""); $button.text("login"); $div.append($button); lightboxMessage($wrapper); } function isCanvasSupported(){ var elem = document.createElement('canvas'); return !!(elem.getContext && elem.getContext('2d')); }function initForm(){ log("initForm()"); function initCommonForm(){ var $form = $("form.common-form"); if($form.length == 0) return; log("initCommonForm()"); var $submit = $form.find(".form-input-submit"); // function onsubmit(){ log("onsubmit()"); $form[0].submit(); } // if($submit.is("input[type='submit']")){ $form.bind("submit", function(e){ e.preventDefault(); if($submit.hasClass("common-button-disabled")) return; onsubmit(); }); }else{ $submit.click(function(){ if($submit.hasClass("common-button-disabled")) return; onsubmit(); }); } $form.bind("submit", function(e){ e.preventDefault(); if($submit.hasClass("common-button-disabled")) return; onsubmit() }); /* $submit.click(function(){ if($(this).hasClass("common-button-disabled")) return; onsubmit(); });*/ SimpleForm_initForm($form, $submit); } /* function isInputText($input){ return $input.hasClass("form-input-text"); } function isInputTextarea($input){ return $input.hasClass("form-input-textarea"); } function isInputSelect($input){ return $input.hasClass("form-input-select"); } function isInputEmail($input){ return $input.hasClass("form-input-email"); } function isInputPassword($input){ return $input.hasClass("form-input-password"); } function isInputConfirmPassword($input){ return $input.hasClass("form-input-confirm-password"); } function initCommonForm(){ // function submitForm($form){ //alert("submit"); log(".submit()"); $form[0].submit(); } function validateElement($element){ clearElementError($element); var $input = $element.find(".form-input"); var skip_validate = ($input.attr("data-validate")=="false"); // function validateRequired(){ //$element.removeClass("form-element-validate-error-required"); if(!$element.hasClass("form-element-required")) return true; if(isInputText($input) || isInputTextarea($input) || isInputEmail($input) || isInputPassword($input) || isInputConfirmPassword($input)){ return !isBlank($input.val()); }else if(isInputSelect($input)){ return ($input[0].selectedIndex != 0); } return false; } function isValidPassword(password){ var regExp = new RegExp(/^.{6,8}$/); return regExp.test(password); } function validateEmail(){ //$element.removeClass("form-element-validate-error-email"); if(!isInputEmail($input)) return true; return isValidEmail($input.val()); } function validatePassword(){ if( (!isInputPassword($input)) && (!isInputConfirmPassword($input)) ) return true; //if(!isInputPassword($input)) return true; return isValidPassword($input.val()); } function validateConfirmPassword(){ if(!isInputConfirmPassword($input)) return true; var password = $input.closest("form").find(".form-input-password").val(); var confpswd = $input.val(); return (password==confpswd); } // //log("validateElement " + $input.attr("name")); if(!validateRequired()) { if(!skip_validate){ addElementValidateError($element, "required"); } return false; } // if(skip_validate) return true; // if(!validateEmail()){ addElementValidateError($element, "email"); return false; } if(!validatePassword()){ addElementValidateError($element, "password"); return false; } if(!validateConfirmPassword()){ addElementValidateError($element, "confirm-password"); return false; } // return true; } function validateForm($form){//return true; var result = true; $form.find(".form-element").each(function(){ if(!validateElement($(this))){ result = false; } }); return result; } function addElementValidateError($element, error){ $element.addClass("form-element-error"); var errorClass = "form-element-validate-error-" + error; var errorData = $element.data("validateError"); if(errorData == null){ errorData = []; } errorData.push(errorClass); $element.data("validateError", errorData); $element.addClass(errorClass); } function clearElementError($element){ $element.removeClass("form-element-error"); var errorData = $element.data("validateError"); if(errorData == null) return; for(var i=0;i"); var $message = $("
"); $wrapper.append($message); var text = getFeedbackMessage(FEEDBACK_MYCART_UPDATE_ERROR); var $button = $("reload my cart"); //var $button = $("
reload my cart"); //$button.click(function(){location.reload();}); var $div = $("
"); $div.text(text); $div.append($button); $message.append($div); lightboxMessageNoClose($wrapper); } function remove_cart($button){ var $item = $button.closest(".cart-item"); var id = $item.attr("data-cart-id"); function success(response){ log("remove_cart success"); log(response); $button.remove(); $item.children().animate({opacity:0}, 200, function(){ $item.animate({height:0},500, function(){ $item.remove(); $cart.trigger("cart-change"); /* if($table.find(".cart-item").length == 0){ $table.fadeOut("fast",function(){ $(".member-table-empty").fadeIn("fast"); }); }else{ $cart.trigger("cart-change"); } */ }); }); } function error(response){ log("remove_cart error"); log(response); die(); } removeProductFromCart(id, success, error); } function on_qty_change($item, $sel){ /* function undo($sel){ var old_val = $sel.attr("data-qty"); var $options = $sel.find("option"); var index = $options.index($options.filter("[value='"+old_val+"']")); $sel[0].selectedIndex = index; } function commit($sel){ $sel.attr("data-qty", $sel.val()); } */ function success(response){ log("updateCartQty success"); log(response); //commit($sel); //recal(); //showModalLoading(); $cart.trigger("cart-change"); } function error(response){ log("updateCartQty error"); log(response); die(); } var cart_id = $item.attr("data-cart-id"); var qty = $sel.val(); var total = parseFloat($item.attr("data-price")) * parseFloat($sel.val()); $item.find(".cart-detail-total-value").text(total); updateCartQty(cart_id, qty, success, error); } /* var $delButtons = $table.find(".cart-item-del-button"); $delButtons.mouseenter(function(){ var $this = $(this); $this.closest(".cart-item-del-button-wrapper").find(".cart-item-del-button-bg").addClass }); $delButtons.mouseleave(function(){ var $this = $(this); $this.closest(".cart-item-del-button-wrapper").find(".cart-item-del-button-bg").hide(); }); $delButtons.click(function(){ remove_cart($(this)); }); */ function reloadDiscount(){ log("reloadDiscount"); log("subtotal = " + $cart.data("subtotal") ); var total = $cart.data("subtotal"); //var discounted_total = total; if(total == 0){ $discount.children().remove(); $cart.data("discounted", total); refreshTotal(); return; } function appendOffDiscount($item){ log("appendOffDiscount " + $item) var $wrapper = $("
"); var $title = $("
"); $title.text($item.find("title").text()); var $off = $("
"); $off.text("-"+$item.find("price").text()); $wrapper.append($title).append($off); $discount.append($wrapper); $wrapper.attr("data-off", $item.find("price_value").text()); total = total - parseFloat($item.find("price_value").text()); //discounted_total = total; $cart.data("discounted", total); } function appendGiftDiscount($item){ log("appendGiftDiscount " + $item); var $wrapper = $("
"); var $title = $("
"); var $discount_title = $("
").text($item.find("title").text()); $title.append($discount_title); // var src = $item.find("image > item > tn").text(); if(!isBlank(src)){ var $div = $("
"); var $img_wrapper = $("
"); var $img = $("").attr("src", src); $img_wrapper.append($img); var $detail_wrapper = $("
"); var $gift_title = $("
").text($item.find("gift_title").text()); $detail_wrapper.append($gift_title); var $gift_desc = $("
").text($item.find("gift_description").text()); $detail_wrapper.append($gift_desc); $div.append($img_wrapper).append($detail_wrapper); $title.append($div); } // var $off = $("
"); $wrapper.append($title).append($off); $discount.append($wrapper); } function updateDiscount($items){ $discount.children().remove(); $cart.data("discounted", $cart.data("subtotal")); $items.each(function(){ var $item = $(this); var type = $item.find("type").text(); if(type == "off"){ appendOffDiscount($item); }else if(type=="gift"){ appendGiftDiscount($item); } }); refreshTotal(); hideModalLoading(); } function success(response){ log("getDiscount success"); //log(response); var xml = $.parseXML(response); var $items = $(xml).find("item > discount > item > item"); updateDiscount($items); } function error(response){ log("getDiscount error"); log(response); hideModalLoading(); die(); } showModalLoading(); getMemberDiscount(total, success, error); } /* function recal(){ log("recal"); var $items = $table.find(".cart-item"); var subtotal = 0; var itemCount = 0; $items.each(function(){ var $this = $(this); if($this.find(".cart-detail-checkout-checkbox")[0].checked){ var price = parseInt($this.attr("data-price")); var qty = parseInt($this.find(".cart-detail-quantity-select").val()); subtotal += (price * qty); itemCount += qty; } }); $subtotal.text(subtotal); $checkoutCount.text(itemCount); reloadDiscount(subtotal); }*/ function refreshTotal(){ log("refreshTotal()"); log("subtotal = " + $cart.data("subtotal")); log("discounted total = " + $cart.data("discounted")); var total = $cart.data("discounted"); // gift point var $gp_select = $cart.find("select[name='gift_point_id']") if($gp_select.length==1){ var gp_off = $gp_select.find("option:selected").attr("data-off"); if(gp_off!=""){ total = total - parseFloat(gp_off); } } // $cart.data("total", total); log("total = " + $cart.data("total")); total = (total<0)?0:total; $checkoutTotal.text(total.toFixed(2)); if($cart.data("discounted") <= 0){ $checkoutButton.addClass("common-button-disabled"); } } function onCartChange(skip_reload_discount){ log("onCartChange"); var $all_items = $table.find(".cart-item"); var $available_items = $all_items.not(".cart-item-disabled"); if($all_items.length == 0){ updateHeaderCartCounter(0); $("#cart-content-wrapper").fadeOut("fast",function(){ $("#cart-content-wrapper-empty").fadeIn("fast"); }); return; } var subtotal = 0; var itemCount = 0; var checkoutCount = 0; $available_items.each(function(){ var $this = $(this); var qty = parseFloat($this.find(".cart-detail-quantity-select").val()); itemCount += qty; if($this.find(".cart-detail-checkout-checkbox")[0].checked){ var price = parseFloat($this.attr("data-price")); subtotal += (price * qty); checkoutCount += qty; } }); if(checkoutCount == 0){ $checkoutButton.addClass("common-button-disabled"); }else{ $checkoutButton.removeClass("common-button-disabled"); } $subtotal.text(subtotal); updateHeaderCartCounter(itemCount); $checkoutCount.text(checkoutCount); $cart.data("subtotal", subtotal); if(skip_reload_discount == true){ //log("subtotal = " + $cart.data("subtotal") ); var discounted = subtotal; $cart.find(".cart-discount-item-type-off").each(function(){ var off = parseFloat($(this).attr("data-off")); //log("off = " + off); discounted = discounted - off; }); $cart.data("discounted", discounted); //log("discounted = " + $cart.data("discounted") ); refreshTotal(); }else{ reloadDiscount(); } } function initCart(){ $cart.bind("cart-change", onCartChange); $checkoutButton.click(function(){ if($checkoutButton.hasClass("common-button-disabled")) return; if(isLogged()){ if(($cart.data("total")<0) && (!confirm($("#mycart-gift-point-overpay-confirm").text()))){ }else{ $("#cart-form").submit(); } }else{ requireLogin(); } }); $cart.find("select[name='gift_point_id']").change(function(){ onCartChange(true); }); onCartChange(true); } function initCartItems(){ $table.find(".cart-item").each(function(){ var $item = $(this); // del var $delButton = $item.find(".cart-item-del-button"); $delButton.mouseenter(function(){ $item.addClass("cart-item-to-del"); }); $delButton.mouseleave(function(){ if($item.hasClass("cart-item-removing"))return; $item.removeClass("cart-item-to-del"); }); $delButton.click(function(){ $item.addClass("cart-item-removing"); if(confirm($("#mycart-remove-confirm").text())){ $item.addClass("cart-item-removing"); $delButton.unbind("click"); $delButton.unbind("mouseleave"); $delButton.unbind("mouseenter"); remove_cart($(this)); }else{ $item.removeClass("cart-item-removing"); $item.removeClass("cart-item-to-del"); } }); // $item.find(".cart-detail-quantity-select").change(function(){ on_qty_change($item, $(this)); }); $item.find(".cart-detail-checkout-checkbox").change(function(){ $cart.trigger("cart-change"); //toggleCheckoutButton(); //recal(); }); }); } initCart(); initCartItems(); } initMycart(); });