// WHEN THE DOCUMENT IS READY jQuery(function(){ /********************************************************************** Tooltips based on Wayfarer Tooltip 1.0.2 (c) 2006-2009 Abel Mohler http://www.wayfarerweb.com/wtooltip.php **********************************************************************/ // CHECK IF THERE ARE ANY ITEMS IN THE CART var cartHasItems = jQuery('td.jcart-item-qty').html(); if(cartHasItems === null) { // DISABLE THE PAYPAL CHECKOUT BUTTON jQuery('#jcart-paypal-checkout').attr('disabled', 'disabled'); } // HIDE THE UPDATE AND EMPTY BUTTONS SINCE THESE ARE ONLY USED WHEN JAVASCRIPT IS DISABLED jQuery('.jcart-hide').remove(); // DETERMINE IF THIS IS THE CHECKOUT PAGE BY CHECKING FOR HIDDEN INPUT VALUE // SENT VIA AJAX REQUEST TO jcart.php WHICH DECIDES WHETHER TO DISPLAY THE CART CHECKOUT BUTTON OR THE PAYPAL CHECKOUT BUTTON BASED ON ITS VALUE // WE NORMALLY CHECK AGAINST REQUEST URI BUT AJAX UPDATE SETS VALUE TO jcart-relay.php var isCheckout = jQuery('#jcart-is-checkout').val(); // IF THIS IS NOT THE CHECKOUT THE HIDDEN INPUT DOESN'T EXIST AND NO VALUE IS SET if (isCheckout !== 'true') { isCheckout = 'false'; } // WHEN AN ADD-TO-CART FORM IS SUBMITTED jQuery('form.jcart').submit(function(){ // GET INPUT VALUES FOR USE IN AJAX POST var itemId = jQuery(this).find('input[name=my-item-id]').val(); var itemPrice = jQuery(this).find('input[name=my-item-price]').val(); var itemWeight = jQuery(this).find('input[name=my-item-weight]').val(); var itemName = jQuery(this).find('input[name=my-item-name]').val(); var itemTitle = jQuery(this).find('input[name=my-item-title]').val(); var itemQty = jQuery(this).find('input[name=my-item-qty]').val(); var itemAdd = jQuery(this).find('input[name=my-add-button]').val(); var sizeId = jQuery(this).find('select[name=sizeId]').val(); var colorId = jQuery(this).find('input[name=colorId]:checked').val() // SEND ITEM INFO VIA POST TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php AND RETURNS UPDATED CART HTML jQuery.post('/jcart/jcart-relay.php', { "my-item-id": itemId, "my-item-price": itemPrice, "my-item-weight": itemWeight, "my-item-name": itemName, "my-item-title": itemTitle, "my-item-qty": itemQty, "sizeId": sizeId, "colorId": colorId, "my-add-button" : itemAdd }, function(data) { // REPLACE EXISTING CART HTML WITH UPDATED CART HTML //jQuery('#jcart').html(data); //jQuery('.jcart-hide').remove(); cbWrapper(data); }); // PREVENT DEFAULT FORM ACTION return false; }); // WHEN THE VISITOR HITS THEIR ENTER KEY // THE UPDATE AND EMPTY BUTTONS ARE ALREADY HIDDEN // BUT THE VISITOR MAY UPDATE AN ITEM QTY, THEN HIT THEIR ENTER KEY BEFORE FOCUSING ON ANOTHER ELEMENT // THIS MEANS WE'D HAVE TO UPDATE THE ENTIRE CART RATHER THAN JUST THE ITEM WHOSE QTY HAS CHANGED // PREVENT ENTER KEY FROM SUBMITTING FORM SO USER MUST CLICK CHECKOUT OR FOCUS ON ANOTHER ELEMENT WHICH TRIGGERS CHANGE FUNCTION BELOW jQuery('#jcart').keydown(function(e) { // IF ENTER KEY if(e.which == 13) { // PREVENT DEFAULT ACTION return false; } }); // JQUERY live METHOD MAKES FUNCTIONS BELOW AVAILABLE TO ELEMENTS ADDED DYNAMICALLY VIA AJAX // WHEN A REMOVE LINK IS CLICKED jQuery('#jcart a').live('click', function(){ // GET THE QUERY STRING OF THE LINK THAT WAS CLICKED var queryString = jQuery(this).attr('href'); queryString = queryString.split('='); // THE ID OF THE ITEM TO REMOVE var removeId = queryString[1]; // SEND ITEM ID VIA GET TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php AND RETURNS UPDATED CART HTML jQuery.get('/jcart/jcart-relay.php', { "jcart_remove": removeId, "jcart_is_checkout": isCheckout }, function(data) { // REPLACE EXISTING CART HTML WITH UPDATED CART HTML jQuery('#jcart').html(data); jQuery('.jcart-hide').remove(); }); // PREVENT DEFAULT LINK ACTION return false; }); // WHEN AN ITEM QTY CHANGES // CHANGE EVENT IS NOT CURRENTLY SUPPORTED BY LIVE METHOD // STILL WORKS IN MOST BROWSERS, BUT NOT INTERNET EXPLORER // INSTEAD WE SIMULATE THE CHANGE EVENT USING KEYUP AND SET A DELAY BEFORE UPDATING THE CART jQuery('#jcart input[type="text"]').live('keyup', function(){ // GET ITEM ID FROM THE ITEM QTY INPUT ID VALUE, FORMATTED AS jcart-item-id-n var updateId = jQuery(this).attr('id'); updateId = updateId.split('-'); // THE ID OF THE ITEM TO UPDATE updateId = updateId[3]; // GET THE NEW QTY var updateQty = jQuery(this).val(); // AS LONG AS THE VISITOR HAS ENTERED A QTY if (updateQty !== '') { // UPDATE THE CART ONE SECOND AFTER KEYUP var updateDelay = setTimeout(function(){ // SEND ITEM INFO VIA POST TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php AND RETURNS UPDATED CART HTML jQuery.post('/jcart/jcart-relay.php', { "item_id": updateId, "item_qty": updateQty, "jcart_update_item": 'update', "jcart_is_checkout": isCheckout }, function(data) { // REPLACE EXISTING CART HTML WITH UPDATED CART HTML jQuery('#jcart').html(data); jQuery('.jcart-hide').remove(); }); }, 1000); } // IF THE VISITOR PRESSES ANOTHER KEY BEFORE THE TIMER HAS EXPIRED, CLEAR THE TIMER // THE NEW KEYDOWN RESULTS IN A NEW KEYUP, TRIGGERING THE KEYUP FUNCTION AGAIN AND RESETTING THE TIMER // REPEATS UNTIL THE USER DOES NOT PRESS A KEY BEFORE THE TIMER EXPIRES IN WHICH CASE THE AJAX POST IS EXECUTED // THIS PREVENTS THE CART FROM BEING UPDATED ON EVERY KEYSTROKE jQuery(this).keydown(function(){ window.clearTimeout(updateDelay); }); }); // END THE DOCUMENT READY FUNCTION }); function cbWrapper(data){ top.location.href="../cart.php";//redirection }