/*!
 * plum.Shop v1.4: A shopping cart for jQuery
 *
 * Copyright 2011 RoboCréatif, LLC
 * <http://robocreatif.com>
 *
 * Date: 13 October, 2011
 */
(function(a){plum.shop=function(b){var c=plum.shop.prototype;a.extend(true,c.options,b);b=c.options;c.storage="cart"+(b.session&&b.sessionurl?"Session":b.localstorage&&!!window.sessionStorage?"Storage":"Cookie");c.getCart();c.createCart(a("."+b.classes.cart));c.listen();b.ready.call(c);return this};plum.shop.prototype={cart:false,quantity:0,subtotal:0,shipping:0,tax:0,discount:0,total:0,storage:null,options:{additem:function(){},cancelurl:null,cartitem:"",classes:{cart:"cart",cartlist:"cart-list",cartdiscount:"cart-discount",cartquantity:"cart-quantity",cartshipping:"cart-shipping",cartsubtotal:"cart-subtotal",carttax:"cart-tax",carttotal:"cart-total",custom:"custom",description:"description",discount:"discount",empty:"empty",id:"id",price:"price",product:"product",purchase:"purchase",quantity:"quantity",shipping:"shipping",remove:"remove",thumb:"thumb",title:"title"},cookie:"plum_shop",currency:"USD",currencyafter:"",currencybefore:"$",currencydecimal:".",currencythousands:",",discount:null,discountcodes:{},emptycart:function(){},headerurl:null,limit:0,listen:{},localstorage:"plum_shop",nofityurl:null,ready:function(){},returnurl:null,session:"plum_shop",sessionurl:null,shipping:function(){},shippingexempt:0,shippingexemptover:true,shippingname:null,shippingrate:0,shippingtype:"variable",statusurl:null,taxcountry:"",taxexempt:0,taxexemptover:false,taxrate:0,updatetotals:function(){}},addItem:function(e,d){if(!e.id){return false}var b=this.getItem(e.id),g=this.options,h=g.classes,f=a("li[data-"+h.id+'="'+e.id+'"]');if(typeof e.thumb==="object"){e.thumb=e.thumb.src}if(typeof e.price==="string"){e.price=this.price(e.price)}a.each(e,function(i,c){if(typeof c==="string"){e[i]=c.replace(/\s+/g," ").replace(/^\s?(.+)\s?$/,"$1")}});if(g.additem.call(this,e)===false||(g.limit&&e.quantity>g.limit)){return false}if(typeof b!=="undefined"){if(e.quantity<1){this.cart.items.splice(b,1);f.fadeOut(300,function(){f.remove()})}else{a.extend(this.cart.items[b],e);f.html(this.createItem(this.cart.items[b]))}}else{this.cart.items.push(e);a("ul."+h.cartlist).append("<li data-"+h.id+'="'+e.id+'">'+this.createItem(e)+"</li>")}this.updateCart(d)},cartCookie:function(d){var f=this.options,e,c,b;if(!d){b=document.cookie.split(";");for(c in b){e=b[c];while(e.charAt(0)===" "){e=e.substring(1)}if(e.indexOf(f.cookie+"=")===0){this.cart=unescape(e.substring((f.cookie+"=").length));this.cart=a.parseJSON(this.cart);break}}}else{e=f.cookie+"="+(typeof this.cart!=="object"?"":escape(this.json({items:this.cart.items,discount:this.cart.discount,shipping:this.cart.shipping})))+"; path=/";if(e.length<4049){document.cookie=e}}},cartSession:function(b){var e=this.options,d={},c=this;if(!b){d[e.session]=true;a.ajax(e.sessionurl,{async:false,type:"GET",data:d,dataType:"json",success:function(f){c.cart=f}})}else{d[e.session]={discount:this.cart.discount,items:this.cart.items,shipping:this.cart.shipping};a.post(e.sessionurl,d)}},cartStorage:function(b){var c=this.options;if(!b){this.cart=window.sessionStorage[c.localstorage]?a.parseJSON(unescape(window.sessionStorage[c.localstorage])):false}else{window.sessionStorage[c.localstorage]=typeof this.cart!=="object"?"":escape(this.json({items:this.cart.items,discount:this.cart.discount,shipping:this.cart.shipping}))}},checkout:function(e,f){var c,b,d='<form style="display:none" action="'+e+'" method="post"accept-charset="utf-8">';for(b in f){c=f[b];d+='<input type="hidden" name="'+c[0]+'" value="'+c[1]+'">'}return a(d+='<input type="submit"></form>').appendTo("body").submit()},createCart:function(d){var b=this,e=this.options.classes;html=[];if(d.length){this.cart.each(function(){html.push("<li data-"+e.id+'="'+this.id+'">'+b.createItem(this)+"</li>")});d.html('<ul class="'+e.cartlist+'">'+html.join("")+"</ul>");a(":input",d).trigger("change")}this.updateCart()},createItem:function(f){var b,e=0,d=this.options.cartitem.replace(/{pricesingle}/g,this.format(f.price)).replace(/{pricetotal}/g,this.format(this.priceSubtotal(f))),c=d.match(/(\{[^\}\s]+\})/g);for(e in c){if(/\d+/.test(e)&&typeof c[e]==="string"){b=c[e].substring(1,c[e].length-1);d=d.replace(new RegExp(c[e],"g"),f[b]||"")}}return d},format:function(d){var f=this.options,e=Math.abs(+d||0).toFixed(2),c=parseInt(e,10)+"",b=(b=c.length)>3?b%3:0;return(d<0?"-":"")+f.currencybefore+(b?c.substr(0,b)+f.currencythousands:"")+c.substr(b).replace(/(\d{3})(?=\d)/g,"$1"+f.currencythousands)+f.currencydecimal+Math.abs(e-c).toFixed(2).slice(2)+f.currencyafter},each:function(f){var e,d=0,b=this.items.length;for(;d<b;d){e=f.call(this.items[d],d++);if(typeof e!=="undefined"&&e!==true){return e}}},emptyCart:function(){var d=this.options.classes,b=a("ul."+d.cartlist+" li").fadeOut(300,function(){b.remove()});a("."+d.discount).val("");this.cart={items:[],discount:false};this.cart.each=this.each;this.updateCart(true)},emptyConfirm:function(b){var d,e=this.options.classes;b&&b.preventDefault();if(!this.quantity){return}this.options.emptycart.call(this)!==false&&this.emptyCart()},getCart:function(){this[this.storage]();this.cart=this.cart||{};this.cart.items=this.cart.items||[];if(this.cart.discount==="false"){this.cart.discount=false}if(this.cart.shipping==="false"){this.cart.shipping=false}this.cart.discount=this.cart.discount||false;this.cart.shipping=this.cart.shipping||false;this.cart.each=this.each;this.cart.each(function(){this.price=parseFloat(this.price);this.quantity=parseInt(this.quantity,10)})},getItem:function(b){return this.cart.each(function(c){return this.id===b.toString()?c:true})},json:function(b){var d=[],c;switch(typeof b){case"function":return"function";case"number":case"boolean":return b;case"string":return'"'+b.replace(/(\"|\/|\{|\}|\n|\r|\t)/g,"\\$1")+'"';default:if(typeof b.length==="number"){for(c in b){if(b.hasOwnProperty(c)){d.push(this.json(b[c]))}}return"["+d.join(",")+"]"}for(c in b){if(b.hasOwnProperty(c)){d.push('"'+c+'":'+this.json(b[c]))}}return"{"+d.join(",")+"}"}},listen:function(){var e=this,f=e.options,g=f.classes,d=0,b;a("."+g.purchase).live("click",function(m){m.preventDefault();var h,k=0,l=a(this).closest("."+g.product),j,c={};a.each(l[0].attributes,function(n,i){n=i.nodeName||i.name;if(n.substring(0,5)==="data-"){n=n.substring(5);if(n.substring(0,g.custom.length+1)===g.custom+"-"){n=n.substring(g.custom.length+1)}!c[n]&&(c[n]=i.nodeValue||i.value)}});a("[class]",l).each(function(){var i=a(this);h=new RegExp(g.price+"|"+g.description+"|"+g.title+"|"+g.thumb+"|"+g.quantity+"|"+g.custom+"-([^\\s]+)");h=i.attr("class").match(h);if(h){h=h[1]||h[0];if(!c[h]){c[h]=i.is(":input")?i.val():i.is("img")?i[0].src:i.text();if(i.is("select")){i=a("option:selected:eq(0)",i)}c.id=c.id||i.attr("id")}}});c.id=c.id||l.attr("id")||null;c.quantity=parseInt(c.quantity||1,10);j=e.getItem(c.id);j=typeof j==="undefined"?0:e.cart.items[j].quantity;e.addItem(a.extend(c,{quantity:j+c.quantity,title:c.title||l[0].title}),true)});a("."+g.cart+" ."+g.remove).live("click",function(h){h.preventDefault();var c=e.getItem(a(this).closest("li").data(g.id));c=e.cart.items[c];c.quantity=0;e.updateQuantity.call(this,e,c)});a("."+g.empty).live("click",function(c){e.emptyConfirm.call(e,c)});a("."+g.cart+" :input").live("change",function(){if(d){return false}var h=a(this),j=e.cart.items[e.getItem(h.closest("li").data(g.id))],c;d=window.setTimeout(function(){d=0;if(h.hasClass(g.quantity)){return e.updateQuantity.call(h[0],e,j)}for(c in f.listen){if(typeof f.listen[c]==="function"){if(h.hasClass(c)){f.listen[c].call(h[0],e,j)}}}},0)});a("."+g.discount).live("change",function(){if(d){return false}var c=this;d=window.setTimeout(function(){d=0;e.cart.discount=c.value in f.discountcodes?c.value:false;e.updateCart(true)},0)});a("select."+g.shipping).live("change",function(){if(d){return false}var c=this;d=window.setTimeout(function(){d=0;e.cart.shipping=c.value;e.updateCart(true)},0)});for(b in this.checkout){if(this.checkout.hasOwnProperty(b)){a("."+(this.options.classes[b]||b)).live("click",{checkout:b},function(c){c.preventDefault();e.quantity&&e.checkout[c.data.checkout].call(e)})}}a("body").bind("plum",function(h,c){a("."+g.cart,c[0]).each(function(){e.createCart(a(this))})})},price:function(b){return parseFloat(b.replace(new RegExp("\\"+this.options.currencydecimal,"g"),".").replace(/[^\d\.]+/,""))},priceShipping:function(){var g=this,h=g.options,j=h.classes,b=0,f,e="",d=a("select."+j.shipping);this.shipping=0;if(typeof h.shippingrate!=="object"){h.shippingrate={Shipping:h.shippingrate}}for(f in h.shippingrate){e+='<option value="'+f+'">'+f+" (";switch(h.shippingtype){case"variable":e+=this.format(this.subtotal*h.shippingrate[f]);break;case"fixed":e+=this.format(this.quantity*h.shippingrate[f]);break;case"flat":e+=this.format(h.shippingrate[f]);break;default:b=0;this.cart.each(function(){b+=h.shipping.call(this,h.shippingrate[f],g)});e+=this.format(b);break}e+=")</option>"}d.html(e);e=a(e);this.cart.shipping=(g.cart.shipping?e.filter(function(){return this.value===g.cart.shipping}):e.eq(0));if(h.shippingexempt&&((h.shippingexemptover&&h.shippingexempt<this.subtotal)||(!h.shippingexemptover&&h.shippingexempt>this.subtotal))){a("option",d).each(function(){a(this).text(this.value+" ("+g.format(0)+")")})}else{if(!this.cart.shipping.text()){this.cart.shipping=e.eq(0)}this.shipping=this.price(this.cart.shipping.text().match(/ \((.+)\)$/)[1]);d.find('[value="'+this.cart.shipping[0].value+'"]').attr("selected",true)}this.cart.shipping=this.cart.shipping[0].value;return this.shipping=parseFloat(this.shipping.toFixed(2))},priceSubtotal:function(b){return b.price*b.quantity},priceTax:function(){var c=this.options,b=this;if(!c.taxcountry||(c.taxexempt&&((c.taxexemptover&&c.taxexempt<this.subtotal)||(!c.taxexemptover&&c.taxexempt>this.subtotal)))){this.tax=0}else{if(typeof c.tax==="function"){this.cart.each(function(){b.tax+=c.tax.call(b,this)})}else{this.tax=(this.subtotal-this.discount)*c.taxrate}}return this.tax=parseFloat(this.tax.toFixed(2))},updateQuantity:function(d,b){var c=(this.value?parseInt(this.value,10):0)-b.quantity;b.quantity+=isNaN(c)?-b.quantity:c;return(typeof this.value!=="undefined"&&this.value===this.defaultValue)||(d.options.limit&&b.quantity>d.options.limit)?this:d.addItem(b,true)},updateCart:function(c){var g={},b=this,f=this.options,e=0;this.quantity=0;this.subtotal=0;this.cart.each(function(){b.quantity+=parseInt(this.quantity,10);b.subtotal+=b.priceSubtotal(this)});this.shipping=0;this.priceShipping();e=!this.quantity||!this.cart.discount?0:/%/.test(f.discountcodes[this.cart.discount])?this.subtotal*parseFloat(f.discountcodes[this.cart.discount])/100:f.discountcodes[this.cart.discount];e=e||0;e+=typeof f.discount==="function"?f.discount.call(this):0;this.discount=this.quantity?e:0;this.updateTotals(c)},updateTotals:function(b){var d=this.options.classes;this.tax=0;this.priceTax();this.total=this.subtotal-this.discount+this.tax+this.shipping;this.total=parseFloat(this.total.toFixed(2));this.options.updatetotals.call(this);a("."+d.cartquantity).html(this.quantity);a("."+d.cartsubtotal).html(this.format(this.subtotal));a("."+d.cartdiscount).html(this.format(-this.discount));a("."+d.carttax).html(this.format(this.tax));a("."+d.cartshipping).html(this.format(this.shipping));a("."+d.carttotal).html(this.format(this.total));a("."+d.discount).val(this.cart.discount||"");b&&this[this.storage](true)}}}(jQuery));
/*!
 * Amazon FPS extension for plum.Shop
 *
 * @package  plum.Shop
 * @since    1.3
 * @param    string  id  An optional invoice ID
 */
(function(a){plum.shop.prototype.checkout.amazon=function(f){var b=0,e=this.options,d=[],c=e.amazonmerchant;if(!/[A-Z0-9]{14}/.test(c)){return false}this.cart.each(function(j){var h,g=1,k=[];j++;d.push(["item_merchant_id_"+j,c]);d.push(["item_sku_"+j,this.id]);d.push(["item_title_"+j,this.title]);d.push(["item_price_"+j,this.price]);d.push(["item_quantity_"+j,this.quantity]);d.push(["item_image_url_"+j,this.thumb]);for(h in this){if(!/^(?:description|id|price|quantity|title|thumb)$/.test(h)){d.push(["item_"+j+".custom_attribute_"+g+"."+h,this[h]]);k.push(h+": "+this[h])}}k.length&&d.push(["item_description_"+j,k])});if(this.discount){d.push(["cart_promotion_1",this.discount]);d.push(["cart_promotion_type_1","fixed_amount_off"])}this.tax&&d.push(["tax_rate",e.taxrate]);if(this.shipping){d.push(["shipping_method_service_level_1","standard"]);d.push(["shipping_method_price_per_shipment_amount_1",this.shipping])}d.push(["currency_code",e.currency]);this.checkout("https://payments.amazon.com/checkout/"+c,d)}}(jQuery));
/*!
 * Custom checkout extension for plum.Shop
 *
 * @package  plum.Shop
 * @since    1.0
 * @param    string  id  An optional invoice ID
 */
(function(a){plum.shop.prototype.checkout.checkout=function(b){(this.options.checkout||function(){}).call(this)===true&&this.emptyCart()}}(jQuery));
/*!
 * Google Checkout extension for plum.Shop
 *
 * @package  plum.Shop
 * @since    1.0
 * @param    string  id  An optional invoice ID
 */
(function(a){plum.shop.prototype.checkout.google=function(g){var c=this.cart.items.length+1,f=this.options,e=[],b,d=f.googlemerchant;if(!/^[\d]{10,15}$/.test(d)){return false}this.cart.each(function(k){var h=[],j;k++;e.push(["item_merchant_id_"+k,this.id]);e.push(["item_name_"+k,this.title]);e.push(["item_quantity_"+k,this.quantity]);e.push(["item_price_"+k,this.price]);e.push(["item_currency_"+k,f.currency]);for(j in this){if(!/^(?:description|id|price|quantity|title|thumb)$/.test(j)){h.push(j+": "+this[j])}}e.push(["item_description_"+k,h.length?h.join(", "):""])});if(this.discount){e.push(["item_merchant_id_"+c,this.cart.discount||0]);e.push(["item_name_"+c,this.cart.discount||this.format(-this.discount)]);e.push(["item_description_"+c,"Discount"]);e.push(["item_quantity_"+c,1]);e.push(["item_price_"+c,-this.discount]);e.push(["item_currency_"+c,f.currency])}if(this.tax){b=f.taxcountry.split(/\s*,\s*/);e.push(["checkout-flow-support.merchant-checkout-flow-support.tax-tables.default-tax-table.tax-rules.default-tax-rule-1.rate",f.taxrate]);for(c in b){e.push(["checkout-flow-support.merchant-checkout-flow-support.tax-tables.default-tax-table.tax-rules.default-tax-rule-1.tax-area.postal-area.country-code",b[c]])}}if(this.shipping){e.push(["checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.name",this.cart.shipping]);e.push(["checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.price",this.shipping]);e.push(["checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.price.currency",f.currency])}g&&e.push(["shopping-cart.merchant-private-data","InvoiceID:#"+g]);this.checkout("https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/"+d,e)}}(jQuery));
/*!
 * Moneybookers extension for plum.Shop
 *
 * @package  plum.Shop
 * @since    1.1
 * @param    string  id  An optional invoice ID
 */
(function(a){plum.shop.prototype.checkout.moneybookers=function(f){var b=0,e=this.options,d=[],c={user:e.moneybookersuser,domain:e.moneybookersdomain};if(!c.user||!/^.+\.[a-z]{2,4}$/.test(c.domain)){return false}this.cart.each(function(){var h,g=[];b++;d.push(["detail"+b+"_description",this.title]);for(h in this){if(!/^(?:description|price|title|thumb)$/.test(h)){g.push(h+": "+this[h])}}d.push(["detail"+b+"_text",g.join(", ")])});b=2;if(this.discount){d.push(["amount"+b+"_description",this.cart.discount||"Discount"]);d.push(["amount"+b++,this.format(-this.discount)])}if(this.tax){d.push(["amount"+b+"_description","Tax"]);d.push(["amount"+b++,this.format(this.tax)]);d.push(["amount",this.total.toFixed(2)])}if(this.shipping){d.push(["amount"+b+"_description",this.cart.shipping]);d.push(["amount"+b++,this.format(this.shipping)])}d.push(["currency",e.currency]);d.push(["pay_to_email",c.user+"@"+c.domain]);e.headerurl&&d.push(["logo_url",e.headerurl]);e.cancelurl&&d.push(["cancel_url",e.cancelurl]);e.returnurl&&d.push(["return_url",e.returnurl]);e.notifyurl&&d.push(["status_url",e.notifyurl]);f&&d.push(["transaction_id",f]);this.checkout("https://www.moneybookers.com/app/payment.pl",d)}}(jQuery));
/*!
 * PayPal extension for plum.Shop
 *
 * @package  plum.Shop
 * @since    1.0
 * @param    string  id  An optional invoice ID
 */
(function(a){plum.shop.prototype.checkout.paypal=function(f){var b=0,e=this.options,d=[],c={user:e.paypaluser,domain:e.paypaldomain};if(!c.user||!/^.+\.[a-z]{2,4}$/.test(c.domain)){return false}this.cart.each(function(){var h,g=0;b++;d.push(["item_number_"+b,this.id]);d.push(["item_name_"+b,this.title||this.id]);d.push(["quantity_"+b,this.quantity]);d.push(["amount_"+b,this.price]);for(h in this){if(!/^(?:description|id|price|quantity|title|thumb)$/.test(h)&&g<7){d.push(["on"+g+"_"+b,h]);d.push(["os"+g+++"_"+b,this[h]])}}});this.discount&&d.push(["discount_amount_cart",this.discount]);this.tax&&d.push(["tax_cart",this.tax]);if(this.shipping){d.push(["custom","Shipping type: "+this.cart.shipping]);d.push(["handling_cart",this.shipping])}d.push(["cmd","_cart"]);d.push(["upload","1"]);d.push(["charset","utf-8"]);d.push(["currency_code",e.currency]);d.push(["business",e.paypaluser+"@"+e.paypaldomain]);e.headerurl&&d.push(["cpp_header_image",e.headerurl]);e.cancelurl&&d.push(["cancel_return",e.cancelurl]);e.returnurl&&d.push(["return",e.returnurl]);e.notifyurl&&d.push(["notify_url",e.notifyurl]);f&&d.push(["invoice",f]);this.checkout("https://www.paypal.com/cgi-bin/webscr",d)}}(jQuery));
