/* Sat, 11 Jul 2015 20:59:28 -0400 */
/* Cartloom (c) 2013 */
// Timestamp: [[ 2014-05-14 09:52:29 +0000 by Mike Yrabedra (mikeyrab) ]]

(function() { // create local scope

if (window.cartloomisloaded) return;
window.cartloomisloaded = 1;

function cartloom($) {

var msie = /MSIE/.test(navigator.userAgent);

/*! jQuery Migrate v1.0.0 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){"use strict";function r(n){o[n]||(o[n]=!0,e.migrateWarnings.push(n),t.console&&console.warn&&!e.migrateMute&&console.warn("JQMIGRATE: "+n))}function a(t,a,o,i){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(i),o},set:function(e){r(i),o=e}}),n}catch(u){}e._definePropertyBroken=!0,t[a]=o}var o={};e.migrateWarnings=[],e.migrateReset=function(){o={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var i={},u=e.attr,s=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},d=/^(?:input|button)$/i,l=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",i,"jQuery.attrFn is deprecated"),e.attr=function(t,a,o,i){var s=a.toLowerCase(),c=t&&t.nodeType;return i&&(r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!l.test(c)&&e.isFunction(e.fn[a]))?e(t)[a](o):("type"===a&&o!==n&&d.test(t.nodeName)&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[s]&&p.test(s)&&(e.attrHooks[s]={get:function(t,r){var a,o=e.prop(t,r);return o===!0||"boolean"!=typeof o&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(s)&&r("jQuery.fn.attr("+s+") may use property instead of attribute")),u.call(e,t,a,o))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?s.apply(this,arguments):("input"!==n&&"option"!==n&&r("property-based jQuery.fn.attr('value') is deprecated"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("property-based jQuery.fn.attr('value', val) is deprecated"),e.value=t,n)}};var g,h,m=e.fn.init,v=/^(?:.*(<[\w\W]+>)[^>]*|#([\w\-]*))$/;e.fn.init=function(t,n,a){var o;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(o=v.exec(t))&&o[1]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),n&&n.context&&(n=n.context),e.parseHTML)?m.call(this,e.parseHTML(e.trim(t),n,!0),n,a):m.apply(this,arguments)},e.fn.init.prototype=e.fn,e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h,a(e,"browser",h,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t};var y=e.fn.data;e.fn.data=function(t){var a,o,i=this[0];return!i||"events"!==t||1!==arguments.length||(a=e.data(i,t),o=e._data(i,t),a!==n&&a!==o||o===n)?y.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),o)};var b=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack,j=e.buildFragment;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,o,i){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var u,s,c,d,l=[];if(e.merge(l,e.buildFragment(t,a).childNodes),o)for(c=function(e){return!e.type||b.test(e.type)?i?i.push(e.parentNode?e.parentNode.removeChild(e):e):o.appendChild(e):n},u=0;null!=(s=l[u]);u++)e.nodeName(s,"script")&&c(s)||(o.appendChild(s),s.getElementsByTagName!==n&&(d=e.grep(e.merge([],s.getElementsByTagName("script")),c),l.splice.apply(l,[u+1,0].concat(d)),u+=d.length));return l}),e.buildFragment=function(t,n,o,i){var u,s="jQuery.buildFragment() is deprecated";n=n||document,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n;try{u=j.call(e,t,n,o,i)}catch(c){u=j.call(e,t,n.nodeType?[n]:n[0],o,i),r(s)}return u.fragment||(a(u,"fragment",u,s),a(u,"cacheable",!1,s)),u};var Q=e.event.add,x=e.event.remove,k=e.event.trigger,C=e.fn.toggle,N=e.fn.live,T=e.fn.die,H="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",M=RegExp("\\b(?:"+H+")\\b"),F=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(F.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(F,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,o){e!==document&&M.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,o)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return C.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,o=t.guid||e.guid++,i=0,u=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%i;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(u.guid=o;a.length>i;)a[i++].guid=o;return this.click(u)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),N?N.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),T?T.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return!n&!M.test(e)&&r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(H.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window);



/*!
 * jQuery blockUI plugin
 * Version 2.66.0-2013.10.09
 * Requires jQuery v1.7 or later
 *
 * Examples at: http://malsup.com/jquery/block/
 * Copyright (c) 2007-2013 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Thanks to Amir-Hossein Sobhi for some excellent contributions!
 */
!function(){"use strict";function a(a){function i(e,i){var k,m,q=e==window,r=i&&void 0!==i.message?i.message:void 0;if(i=a.extend({},a.blockUI.defaults,i||{}),!i.ignoreIfBlocked||!a(e).data("blockUI.isBlocked")){if(i.overlayCSS=a.extend({},a.blockUI.defaults.overlayCSS,i.overlayCSS||{}),k=a.extend({},a.blockUI.defaults.css,i.css||{}),i.onOverlayClick&&(i.overlayCSS.cursor="pointer"),m=a.extend({},a.blockUI.defaults.themedCSS,i.themedCSS||{}),r=void 0===r?i.message:r,q&&g&&j(window,{fadeOut:0}),r&&"string"!=typeof r&&(r.parentNode||r.jquery)){var s=r.jquery?r[0]:r,t={};a(e).data("blockUI.history",t),t.el=s,t.parent=s.parentNode,t.display=s.style.display,t.position=s.style.position,t.parent&&t.parent.removeChild(s)}a(e).data("blockUI.onUnblock",i.onUnblock);var v,w,x,y,u=i.baseZ;v=c||i.forceIframe?a('<iframe class="blockUI" style="z-index:'+u++ +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+i.iframeSrc+'"></iframe>'):a('<div class="blockUI" style="display:none"></div>'),w=i.theme?a('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+u++ +';display:none"></div>'):a('<div class="blockUI blockOverlay" style="z-index:'+u++ +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>'),i.theme&&q?(y='<div class="blockUI '+i.blockMsgClass+' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(u+10)+';display:none;position:fixed">',i.title&&(y+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(i.title||"&nbsp;")+"</div>"),y+='<div class="ui-widget-content ui-dialog-content"></div>',y+="</div>"):i.theme?(y='<div class="blockUI '+i.blockMsgClass+' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(u+10)+';display:none;position:absolute">',i.title&&(y+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(i.title||"&nbsp;")+"</div>"),y+='<div class="ui-widget-content ui-dialog-content"></div>',y+="</div>"):y=q?'<div class="blockUI '+i.blockMsgClass+' blockPage" style="z-index:'+(u+10)+';display:none;position:fixed"></div>':'<div class="blockUI '+i.blockMsgClass+' blockElement" style="z-index:'+(u+10)+';display:none;position:absolute"></div>',x=a(y),r&&(i.theme?(x.css(m),x.addClass("ui-widget-content")):x.css(k)),i.theme||w.css(i.overlayCSS),w.css("position",q?"fixed":"absolute"),(c||i.forceIframe)&&v.css("opacity",0);var z=[v,w,x],A=q?a("body"):a(e);a.each(z,function(){this.appendTo(A)}),i.theme&&i.draggable&&a.fn.draggable&&x.draggable({handle:".ui-dialog-titlebar",cancel:"li"});var B=f&&(!a.support.boxModel||a("object,embed",q?null:e).length>0);if(d||B){if(q&&i.allowBodyStretch&&a.support.boxModel&&a("html,body").css("height","100%"),(d||!a.support.boxModel)&&!q)var C=p(e,"borderTopWidth"),D=p(e,"borderLeftWidth"),E=C?"(0 - "+C+")":0,F=D?"(0 - "+D+")":0;a.each(z,function(a,b){var c=b[0].style;if(c.position="absolute",2>a)q?c.setExpression("height","Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:"+i.quirksmodeOffsetHack+') + "px"'):c.setExpression("height",'this.parentNode.offsetHeight + "px"'),q?c.setExpression("width",'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'):c.setExpression("width",'this.parentNode.offsetWidth + "px"'),F&&c.setExpression("left",F),E&&c.setExpression("top",E);else if(i.centerY)q&&c.setExpression("top",'(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'),c.marginTop=0;else if(!i.centerY&&q){var d=i.css&&i.css.top?parseInt(i.css.top,10):0,e="((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "+d+') + "px"';c.setExpression("top",e)}})}if(r&&(i.theme?x.find(".ui-widget-content").append(r):x.append(r),(r.jquery||r.nodeType)&&a(r).show()),(c||i.forceIframe)&&i.showOverlay&&v.show(),i.fadeIn){var G=i.onBlock?i.onBlock:b,H=i.showOverlay&&!r?G:b,I=r?G:b;i.showOverlay&&w._fadeIn(i.fadeIn,H),r&&x._fadeIn(i.fadeIn,I)}else i.showOverlay&&w.show(),r&&x.show(),i.onBlock&&i.onBlock();if(l(1,e,i),q?(g=x[0],h=a(i.focusableElements,g),i.focusInput&&setTimeout(n,20)):o(x[0],i.centerX,i.centerY),i.timeout){var J=setTimeout(function(){q?a.unblockUI(i):a(e).unblock(i)},i.timeout);a(e).data("blockUI.timeout",J)}}}function j(b,c){var d,e=b==window,f=a(b),i=f.data("blockUI.history"),j=f.data("blockUI.timeout");j&&(clearTimeout(j),f.removeData("blockUI.timeout")),c=a.extend({},a.blockUI.defaults,c||{}),l(0,b,c),null===c.onUnblock&&(c.onUnblock=f.data("blockUI.onUnblock"),f.removeData("blockUI.onUnblock"));var m;m=e?a("body").children().filter(".blockUI").add("body > .blockUI"):f.find(">.blockUI"),c.cursorReset&&(m.length>1&&(m[1].style.cursor=c.cursorReset),m.length>2&&(m[2].style.cursor=c.cursorReset)),e&&(g=h=null),c.fadeOut?(d=m.length,m.stop().fadeOut(c.fadeOut,function(){0===--d&&k(m,i,c,b)})):k(m,i,c,b)}function k(b,c,d,e){var f=a(e);if(!f.data("blockUI.isBlocked")){b.each(function(){this.parentNode&&this.parentNode.removeChild(this)}),c&&c.el&&(c.el.style.display=c.display,c.el.style.position=c.position,c.parent&&c.parent.appendChild(c.el),f.removeData("blockUI.history")),f.data("blockUI.static")&&f.css("position","static"),"function"==typeof d.onUnblock&&d.onUnblock(e,d);var g=a(document.body),h=g.width(),i=g[0].style.width;g.width(h-1).width(h),g[0].style.width=i}}function l(b,c,d){var e=c==window,f=a(c);if((b||(!e||g)&&(e||f.data("blockUI.isBlocked")))&&(f.data("blockUI.isBlocked",b),e&&d.bindEvents&&(!b||d.showOverlay))){var h="mousedown mouseup keydown keypress keyup touchstart touchend touchmove";b?a(document).bind(h,d,m):a(document).unbind(h,m)}}function m(b){if("keydown"===b.type&&b.keyCode&&9==b.keyCode&&g&&b.data.constrainTabKey){var c=h,d=!b.shiftKey&&b.target===c[c.length-1],e=b.shiftKey&&b.target===c[0];if(d||e)return setTimeout(function(){n(e)},10),!1}var f=b.data,i=a(b.target);return i.hasClass("blockOverlay")&&f.onOverlayClick&&f.onOverlayClick(b),i.parents("div."+f.blockMsgClass).length>0?!0:0===i.parents().children().filter("div.blockUI").length}function n(a){if(h){var b=h[a===!0?h.length-1:0];b&&b.focus()}}function o(a,b,c){var d=a.parentNode,e=a.style,f=(d.offsetWidth-a.offsetWidth)/2-p(d,"borderLeftWidth"),g=(d.offsetHeight-a.offsetHeight)/2-p(d,"borderTopWidth");b&&(e.left=f>0?f+"px":"0"),c&&(e.top=g>0?g+"px":"0")}function p(b,c){return parseInt(a.css(b,c),10)||0}a.fn._fadeIn=a.fn.fadeIn;var b=a.noop||function(){},c=/MSIE/.test(navigator.userAgent),d=/MSIE 6.0/.test(navigator.userAgent)&&!/MSIE 8.0/.test(navigator.userAgent);document.documentMode||0;var f=a.isFunction(document.createElement("div").style.setExpression);a.blockUI=function(a){i(window,a)},a.unblockUI=function(a){j(window,a)},a.growlUI=function(b,c,d,e){var f=a('<div class="growlUI"></div>');b&&f.append("<h1>"+b+"</h1>"),c&&f.append("<h2>"+c+"</h2>"),void 0===d&&(d=3e3);var g=function(b){b=b||{},a.blockUI({message:f,fadeIn:"undefined"!=typeof b.fadeIn?b.fadeIn:700,fadeOut:"undefined"!=typeof b.fadeOut?b.fadeOut:1e3,timeout:"undefined"!=typeof b.timeout?b.timeout:d,centerY:!1,showOverlay:!1,onUnblock:e,css:a.blockUI.defaults.growlCSS})};g(),f.css("opacity"),f.mouseover(function(){g({fadeIn:0,timeout:3e4});var b=a(".blockMsg");b.stop(),b.fadeTo(300,1)}).mouseout(function(){a(".blockMsg").fadeOut(1e3)})},a.fn.block=function(b){if(this[0]===window)return a.blockUI(b),this;var c=a.extend({},a.blockUI.defaults,b||{});return this.each(function(){var b=a(this);c.ignoreIfBlocked&&b.data("blockUI.isBlocked")||b.unblock({fadeOut:0})}),this.each(function(){"static"==a.css(this,"position")&&(this.style.position="relative",a(this).data("blockUI.static",!0)),this.style.zoom=1,i(this,b)})},a.fn.unblock=function(b){return this[0]===window?(a.unblockUI(b),this):this.each(function(){j(this,b)})},a.blockUI.version=2.66,a.blockUI.defaults={message:"<h1>Please wait...</h1>",title:null,draggable:!0,theme:!1,css:{padding:0,margin:0,width:"30%",top:"40%",left:"35%",textAlign:"center",color:"#000",border:"3px solid #aaa",backgroundColor:"#fff",cursor:"wait"},themedCSS:{width:"30%",top:"40%",left:"35%"},overlayCSS:{backgroundColor:"#000",opacity:.6,cursor:"wait"},cursorReset:"default",growlCSS:{width:"350px",top:"10px",left:"",right:"10px",border:"none",padding:"5px",opacity:.6,cursor:"default",color:"#fff",backgroundColor:"#000","-webkit-border-radius":"10px","-moz-border-radius":"10px","border-radius":"10px"},iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:!1,baseZ:1e3,centerX:!0,centerY:!0,allowBodyStretch:!0,bindEvents:!0,constrainTabKey:!0,fadeIn:200,fadeOut:400,timeout:0,showOverlay:!0,focusInput:!0,focusableElements:":input:enabled:visible",onBlock:null,onUnblock:null,onOverlayClick:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",ignoreIfBlocked:!1};var g=null,h=[]}"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],a):a(jQuery)}();

// Timestamp: [[ 2013-12-21 06:26:43 +0000 by Mike Yrabedra (mikeyrab) ]]

// strings that need localization injection
var TEXT = {
    cart_title:        'My Cart',
    qty_title:         'Quantity',
    item_title:        'Item',
    price_title:       'Price',
    line_total_title:   'Total',
    subtotal_title:    'Subtotal',
    checkout_title:    'Checkout Now',
    delete_attr:       'Delete',
    update_attr:       'Refresh',
    resize_attr:       'Resize',
    delete_prompt:     'Are you sure you want to do this?',
    ok:                'OK',
    yes:               'OK',
    no:                'Cancel',
    msg_order_timeout: 'Process has Timed Out.',
    checkout:          'Checkout',
    cartloom_url:      'https:bereanpublications.cartloom.com',
    shopping_cart:     'Shopping Cart',
    close_cart:        'Close Cart',
    paypal:        	   'Checkout with PayPal',
    processing:        'Processing...',
    continue_shopping: 'Continue Shopping'
};

var enable_paypal_express = false;

// blockUI styling
var pageBlockStyles = {
	cursor: 'default',
	width: 	'700px',
	background: '#ffffff'
};
var pageBlockOverlayStyles = {
    backgroundColor:            '#000',
    opacity:                    '0.35',
    cursor: 'default'
};
var cartBlockStyles = {
    'background-color':         'white',
    'text-align':               'center',
    color:                      '#777777',
    opacity:                    '1',
    padding:                    '20px',
    position:                   'absolute',
    top:                        '100px',
    width:                      '60%',
    border: 					'1px solid #999',
    border: 					'1px solid rgba(0, 0, 0, 0.3)',
    '*border': 					'1px solid #999', /* IE6-7 */
    '-webkit-border-radius': 	'6px',
    '-moz-border-radius': 		'6px',
    'border-radius': 			'6px',
    '-webkit-box-shadow': 		'0 3px 7px rgba(0, 0, 0, 0.3)',
    '-moz-box-shadow': 			'0 3px 7px rgba(0, 0, 0, 0.3)',
    'box-shadow': 				'0 3px 7px rgba(0, 0, 0, 0.3)',
    '-webkit-background-clip':	'padding-box',
    '-moz-background-clip': 	'padding-box',
    'background-clip': 			'padding-box'
  
};
var cartBlockOverlayStyles = {
    backgroundColor:            'white',
    opacity:                    '0.45'
};

var progress_bar = '<div class="cartloom-progress striped active"><div class="bar" style="width: 100%;"></div></div>';


// cleartype fixes (by malsup)
if (msie) {
$.fn.fadeIn=function(A,B){return this.animate({opacity:"show"},A,function(){if(msie){this.style.removeAttribute("filter")}if($.isFunction(B)){B()}})};$.fn.fadeOut=function(A,B){return this.animate({opacity:"hide"},A,function(){if(msie){this.style.removeAttribute("filter")}if($.isFunction(B)){B()}})};$.fn.fadeTo=function(A,C,B){return this.animate({opacity:C},A,function(){if(C==1&&msie){this.style.removeAttribute("filter")}if($.isFunction(B)){B()}})};
}

// fn to handle jsonp with timeouts
$.getJSONP = function(s) {
    s.dataType = 'jsonp';
    $.ajax(s);
    if (!s.timeout || !/callback/.test(s.url))
        return;

    var t = 0, cb = s.url.match(/callback=(\w+)/)[1], cbFn = window[cb];
    window[cb] = function(json) {
        clearTimeout(t);
        cbFn(json);
        cbFn = null;
    };

    t = setTimeout(function() {
        if (!cbFn) return;
        window[cb] = function(){};
        s.onTimeout(s.url);
        $('head script[src$='+s.url+']').remove();
    }, s.timeout);
};

$.fn.blockAndSpin = function() {
    if (!useAnimations)
        this.block({ message: null, overlayCSS: cartBlockOverlayStyles });
    else
        this.block({ message: progress_bar, css: cartBlockStyles, overlayCSS: cartBlockOverlayStyles });
    $('> .blockUI', this).eq(2).addClass('cartloom-alert');
    return this;
};

$.fn.unblockAndSpin = function() {
    return this.unblock();
};


var $cl = $('#cljs');
var scriptSrc = $cl.attr('src');
var mode = (scriptSrc.match(/mode=(float|embed)/)||[0,'float'])[1]; // not needed, remove?
//var useOverlay = /ol=1/i.test(scriptSrc);
var useOverlay = 1; // always use overlay, no test (like above)
var useAnimations = ! /ani=0/i.test(scriptSrc); // not needed, remove?
var iPad = /iPad/i.test(navigator.userAgent);
var mobile = /(iPhone|iPod|Android)/i.test(navigator.userAgent);

var quirksmode;

// helpers functions
var Util = { 
    domain: ((scriptSrc.match(/\/\/([^\/]+)/) || [])[1]) + '_',
    realDomain: /^www\./.test(location.hostname) ? location.hostname.substring(4) : location.hostname,
    debug: function(s) {
        if (window.console && window.console.log) window.console.log('[cart.js] '+s);
    },
    addParam: function(url, key, value) {
        if (!key || !value) return url;
        return url + (/\?/.test(url) ? '&' : '?') + key + '=' + value;
    },
    setCookie: function(name, value) {
        name = Util.domain + name; // prefix domain into cookie name
        document.cookie = name+'='+value + '; path=/; domain=' + Util.realDomain;
    },
    getCookie: function(name) {
        name = Util.domain + name; // prefix domain into cookie name
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i=0, max=cookies.length; i < max; i++) {
                var cookie = $.trim(cookies[i]);
                if (cookie.substring(0, name.length + 1) == (name + '='))
                    return cookie.substring(name.length + 1);
            }
        }
        return null;
    },
    guid: function() {
        var result='';
        for(var i=0; i<32; i++)
            result += Math.floor(Math.random()*16).toString(16).toUpperCase();
        return result
    }
};


var Cartloom = {}, CL = Cartloom;

// MY: now using cart.css so not confuse shit browsers like IE, 04-21-2011 08:24:55 AM

var pattern;

if(!scriptSrc.indexOf("cart\/cl") != -1){
 
 
}else{
	
	pattern = '/cart\/cl/i';
	
}

$.extend(Cartloom, {

    urls: {
    	
        // assumption: all these files are in same folder
        stylesheet: scriptSrc.replace(/cart.js/i, 'cart.css').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'cart.css').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'cart.css'),
        getCart:    scriptSrc.replace(/cart.js/i, 'cart/get/').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'cart/get/').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'cart/get/'),
        viewCart:   scriptSrc.replace(/cart.js/i, 'cart/mobile/view/').replace(/cart\/cl/i, 'cart/mobile/view/').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'cart/mobile/view/'),
        addToCart:  scriptSrc.replace(/cart.js/i, 'cart/add/').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'cart/add/').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'cart/add/'),
        addToCartMobile:  scriptSrc.replace(/cart.js/i, 'cart/mobile/add/').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'cart/mobile/add/').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'cart/mobile/add/'),
        itemDelete: scriptSrc.replace(/cart.js/i, 'cart/delete/').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'cart/delete').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'cart/delete'),
        itemUpdate: scriptSrc.replace(/cart.js/i, 'cart/update/').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'cart/update').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'cart/update'),
        checkout:   scriptSrc.replace(/cart.js/i, 'checkout/start/').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'checkout/start/').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'checkout/start/'),
        paypal:     scriptSrc.replace(/cart.js/i, 'checkout/paypal/sec/').replace(/cart\/cl[a-zA-Z0-9=&\?]*/i, 'checkout/paypal/sec/').replace(/c\/cartloom.js[a-zA-Z0-9=&\?]*/i, 'checkout/paypal/sec/')


    },

    timeouts: {
        cartUpdate:  10000
    },

    initialize: function() {
        // see if we have a cid session cookie; otherwise create one
        var cid = Util.getCookie('cid');
        if (!cid) {
            cid = Util.guid();
            Util.setCookie('cid', cid);
            Util.debug('cid='+cid);
        }
        this.cid = cid;
        this.updateUrlsWithCid(cid);
        this.loadStylesheet();
        this.buildDOM();
        this.bindSellerForms();
        
        $('.cartloom-close').click(function(e) {
            e.preventDefault();
            CL.showCart(0);
            return false;
        });
        
        
        // custom event handling
        $(document).bind('cartloom-item-delete', function(e, data, pid) {
            Util.debug('event: ' + e.type + '; data=' + data);

            $('.cartloom-body').blockAndSpin();
            $.getJSONP({
                url:       CL.urls.itemDelete,
                data:      data,
                success:   function(json) {
                     CL.cartDeleteCallback(json, pid);
                },
                timeout:   CL.timeouts.cartUpdate,
                onTimeout: CL.cartUpdateTimeoutCallback
            });
        });
        
        $(document).bind('cartloom-item-update', function(e, data) {
            Util.debug('event: ' + e.type + '; data=' + data);

            $('.cartloom-body').blockAndSpin();

            // make php happy, add [] to param names
            data = data.replace(/=/g,'[]=');

            $.getJSONP({
                url:  CL.urls.itemUpdate,
                data: data,
                success: CL.cartUpdateCallback,
                timeout: CL.timeouts.cartUpdate,
                onTimeout: CL.cartUpdateTimeoutCallback
            });
        });
        
        this.bindLiveEvents();

        this.$box.blockAndSpin();
        
        $.getJSONP({
            url:         CL.urls.getCart,
            success:     CL.cartGetCallback,
            timeout:     CL.timeouts.cartUpdate,
            onTimeout:   CL.cartUpdateTimeoutCallback
        });
        
        // position cart at fixed at top of page
       // $('#cartloom-box').css({ position: 'fixed', top: CL.boxTop || 0 });

       
    },

        
    updateUrlsWithCid: function(cid) {
        //CL.urls.stylesheet = Util.addParam(CL.urls.stylesheet, 'cid', cid);
        CL.urls.getCart = Util.addParam(CL.urls.getCart, 'cid', cid);
        //CL.urls.viewCart = Util.addParam(CL.urls.viewCart, 'cid', cid);
        //CL.urls.addToCart = Util.addParam(CL.urls.addToCart, 'cid', cid);
        //CL.urls.addToCartMobile = Util.addParam(CL.urls.addToCartMobile, 'cid', cid);
        CL.urls.itemDelete = Util.addParam(CL.urls.itemDelete, 'cid', cid);
        CL.urls.itemUpdate = Util.addParam(CL.urls.itemUpdate, 'cid', cid);
        
        // strip out triggers 05-05-10 09.37.48 AM
        CL.urls.checkout = CL.urls.checkout.replace(/[\?&]rs=[a-zA-Z0-9]+/i,'')
                                           .replace(/[\?&]dr=[a-zA-Z0-9]+/i,'')
                                           .replace(/[\?&]ol=[a-zA-Z0-9]+/i,'')
                                           .replace(/[\?&]mode=[a-zA-Z0-9]+/i,'')
                                           .replace(/[\?&]nojq=[a-zA-Z0-9]+/i,'');
                                          
                                           
        CL.urls.checkout = (CL.urls.checkout + cid + '?utm_nooverride=1'); 
        
        CL.urls.paypal = CL.urls.paypal.replace(/[\?&]rs=[a-zA-Z0-9]+/i,'')
                                       .replace(/[\?&]dr=[a-zA-Z0-9]+/i,'')
                                       .replace(/[\?&]ol=[a-zA-Z0-9]+/i,'')
                                       .replace(/[\?&]mode=[a-zA-Z0-9]+/i,'')
                                       .replace(/[\?&]nojq=[a-zA-Z0-9]+/i,'');
                                        
        CL.urls.paypal = (CL.urls.paypal + cid);  
         
        
    },

    loadStylesheet: function() {
        // add cartoom stylesheet
        var head = document.getElementsByTagName('head')[0];
        var de = document.documentElement, db = document.body;
        if (!head) {
            head = document.createElement('head');
            var docEl = document.getElementsByTagName('html')[0] || de;
            docEl.insertBefore(head, docEl.firstChild);
        }
        var $link = $(document.createElement('link'))
            .attr({type: 'text/css', href: CL.urls.stylesheet + '?_='+new Date().getTime(), rel: 'stylesheet'});
        var link = $link[0];
        //head.appendChild(link);
        // Add styles sheet BEFORE custom CSS from plugin.
        if ( $('#cartloom-custom-css').length > 0 ) {
            $('#cartloom-custom-css').before(link);
        } else {
            head.appendChild(link);
        }
    },

    buildDOM: function() {
        // use classname based on seller's desired "mode" (embed or float)
        // ! Build Cart Template
        var m = mode.toLowerCase();
        var cls = quirksmode ? '' : 'cartloom-box-' + m;
        var hide = m == 'float' ? ' style="display:none"' : '';
        var markup;
        var paypal_express = '';
        
        if (enable_paypal_express)
            paypal_express = '<a id="cartloom-paypal-btn" href="'+CL.urls.paypal+'" target="_top" class="cartloom-btn cartloom-btn-large btn-paypal">'+TEXT.paypal+'</a>';
       

        //normal markup
        markup = ''
        +'<div id="cartloom-box"'+hide+'>'
        +       '<div class="cartloom-header">'
        +           '<span class="cartloom-close">&times;</span><h3>' + TEXT.cart_title + '</h3>'
        +       '</div>'
        +       '<div class="cartloom-body">'
        +           '<table class="cartloom-table">'
        +           '<thead><tr><th>' + TEXT.item_title + '</th><th>' + TEXT.qty_title + '</th><th>' + TEXT.price_title + '</th><th>' + TEXT.line_total_title + '</th><th></th><th></th></tr></thead>'
        +               '<tbody id="cartloom-rows"></tbody>'
        +           '</table>'
        +       '</div>'
        +       '<div class="cartloom-footer">'  
        +			'<span class="cartloom-close cartloom-btn cartloom-btn-large pull-left">' + TEXT.continue_shopping + '</span>'         
        +           '<span class="cartloom-btn cartloom-btn-large btn-total"><span id="cartloom-total"></span></span>'
        +           '<a id="cartloom-checkout-btn" href="'+CL.urls.checkout+'" target="_top" class="cartloom-btn cartloom-btn-large btn-checkout">'+TEXT.checkout+'</a>'
        +           paypal_express
        +       '</div>'
        +'</div>';


         // add cart markup immediately after #cljs script tag
         CL.$box = $(markup).insertAfter($cl);
    },


    bindSellerForms: function() {
    
    //$('.cartloom-cart-count').html('2');
        // self-contained anchor
        $(document).on("click", "a.ydcl-addtocart, a.cartloom-addtocart", function(e){
       
        
        	var href = $(this).prop("href");
            var pid = href.substr(href.lastIndexOf('/') + 1);
            
            // this will check for legacy snippet use and hopefully convert it.
            if(pid.match(/[\?&]?pid=[a-zA-Z0-9]+/i)){
	            var params = pid.split('=');
	            //alert(params[1]);
	            pid = params[1];
            }
	            
	            
            if(!mobile){
                e.preventDefault();
                var data = this.search.substring(1);
                //data += ('&cid=' + CL.cid);
                if(!data.match(/[\?&]?pid=[a-zA-Z0-9]+/i)){
                	data += ('pid=' + pid);
                }
                addProduct(data);
                return false;
            }else{
	            $(this).prop('href', CL.urls.addToCartMobile + pid + '/' + CL.cid);
                return true;
            }
        });
        
        
        $(document).on("click", "#cartloom-checkout-btn", function(event){
            $(this).addClass('disabled').html(TEXT.processing);
            $('#cartloom-paypal-btn').addClass('disabled');
            $('.cartloom-body').blockAndSpin();
        });
        
        // product forms
        //$('form.ydcl-addtocart, form.cartloom-addtocart').submit(function(e) {
        $(document).on('submit', 'form.ydcl-addtocart, form.cartloom-addtocart', function(e) {
            if(!mobile){
                e.preventDefault();
                var data = $(this).serialize();
                data += ('&cid=' + CL.cid);
                addProduct(data);
                return false;
            }else{
            	var action = $(this).prop("action");
	            var pid = action.substr(action.lastIndexOf('/') + 1);
                $(this).prop('target', '_self'); // in case old snippet with _blank target is present
                $(this).prop('action', CL.urls.addToCartMobile + pid + '/' + CL.cid);
                return true;
            }
        });
        
        function addProduct(data) {

            $.getJSONP({
                data:        data,
                url:         CL.urls.addToCart + CL.cid,
                success:     CL.cartUpdateCallback,
                timeout:     CL.timeouts.cartUpdate,
                onTimeout:   CL.cartUpdateTimeoutCallback
            });
            CL.showCart(1, true);
            $('.cartloom-body').blockAndSpin();
        }

        // view-cart events
        $('form.ydcl-viewcart, form.cartloom-viewcart').submit(function(e) {
            if(!mobile){
                e.preventDefault();
                CL.showCart(1);
                return false;
            }else{
                $(this).prop('target', '_self'); // in case old snippet with _blank target is present
                $(this).prop('href', CL.urls.viewCart + CL.cid);
                return true;
            }
        });
       $(document).on('click', 'a.ydcl-viewcart,button.ydcl-viewcart,a.cartloom-viewcart,button.cartloom-viewcart', function(e) {
            if(!mobile){
                e.preventDefault();
                CL.showCart(1);
                return false;
            }else{
                $(this).prop('href', CL.urls.viewCart + CL.cid);
                return true;
            }
        });
      
    },

    cartUpdateTimeoutCallback: function() {
        $('.cartloom-body').unblockAndSpin();
        var msg = TEXT.msg_order_timeout + '<br><a class="cartloom-btn">'+TEXT.ok+'</a>';
        CL.$box.block({ message: msg, css: cartBlockStyles, overlayCSS: cartBlockOverlayStyles });
        $('> .blockUI', CL.$box[0]).eq(2).addClass('cartloom-alert');
        CL.$box.find('.blockUI .cartloom-btn').click(function() {
            CL.$box.unblock();
        });
    },
    
    cartGetCallback: function(json) {
        if (json && json.success) {
            $('#cartloom-rows').html(json.data);
            $('#cartloom-total').html(json.total);
            $('.cartloom-cart-count').html(json.qty);
        }
        CL.$box.unblockAndSpin();
    },
    
    cartUpdateCallback: function(json) {
        $('.cartloom-body').unblockAndSpin();

        if (json.success) {
            if (json.fullCart) {
                $('#cartloom-rows').html(json.data);
            }
            else {
                // just append the new row
                
                var $rows = $(json.data);
                if (useAnimations) {
                    $rows.css('opacity',0).appendTo('#cartloom-rows');
                    $rows.animate({ opacity: 1 }, 800);
                }
                else {
                    $rows.appendTo('#cartloom-rows');
                }
            }
            $('#cartloom-total').html(json.total);
            $('.cartloom-cart-count').html(json.qty);
        }
        else {
            var msg = '<div class="cartloom-alert-body">' + json.message + '<p><a class="cartloom-btn">'+TEXT.ok+'</a></p></div>';
            CL.$box.block({ message: msg, css: cartBlockStyles, overlayCSS: cartBlockOverlayStyles });
            $('> .blockUI', CL.$box[0]).eq(2).addClass('cartloom-alert');
        }
    },

    cartDeleteCallback: function(json, pid) {
        if (json.success) {
            if (json.fullCart) {
                $('#cartloom-rows').html(json.data);
                $('.cartloom-body').unblockAndSpin();
            }
            else {
                // delete the row
                var $row = $('#cartloom-rows input[name=pid]').filter('[value='+pid+']').closest('tr');
                if (useAnimations) {
                    $row.animate({ opacity: 0, backgroundColor: 'red' }, 800, function() {
                        $row.remove();
                        $('.cartloom-body').unblockAndSpin();
                    })
                }
                else {
                    $row.remove();
                    $('.cartloom-body').unblockAndSpin();
                }
            }
            $('#cartloom-total').html(json.total);
            $('.cartloom-cart-count').html(json.qty);
        }
        else {
            var msg = '<div class="cartloom-alert-body">' + json.message + '<p><a class="cartloom-btn">'+TEXT.ok+'</a></p></div>';
            CL.$box.block({ message: msg, css: cartBlockStyles, overlayCSS: cartBlockOverlayStyles });
            $('> .blockUI', CL.$box[0]).eq(2).addClass('cartloom-alert');
        }
    },

    showCart: function(show, andBlock) {
        
        if (show) {
            $.blockUI({ 
                bindEvents: false,
                message: $('#cartloom-box'),
                css: pageBlockStyles,
                overlayCSS: pageBlockOverlayStyles,
                baseZ:20000
             });
             
            $('body > .blockUI').addClass('cartloom-modal');
            
            
            CL.$box.bind('keyup', function(e) {
                if (e.keyCode == 27)
                    CL.showCart(0);
            });
            
            $('.blockOverlay').click(function(e) { // <-- better place for this?
            	$.unblockUI();
            });
        
        }
        else {
            CL.$box.unbind('keypress,keyup');
            $.unblockUI();
        }
        

        if (useAnimations)
            CL.$box[show ? 'fadeIn' : 'fadeOut']('fast');
        else
            CL.$box[show ? 'show' : 'hide']();

    },
    
    bindLiveEvents: function() {

        // handles modals inside main modal
        $(document).on('click', '#cartloom-box .cartloom-alert-body .cartloom-btn', function() {
            CL.$box.unblock();
            return false;
        });
        
        $('#cartloom-rows').delegate('.cartloom-delete', 'click', function() {
            var pid = $(this).closest('tr').find('input[name=pid]').val();
   
            var $blocked = $('.cartloom-body').block({
                message: '<p>'+TEXT.delete_prompt + '</p><div><a class="cartloom-btn">'+TEXT.no+'</a> <a class="cartloom-btn cartloom-btn-yes">'+TEXT.yes+'</a></div>',
                css: cartBlockStyles, 
                overlayCSS: cartBlockOverlayStyles
            });
            $('> .blockUI', $blocked[0]).eq(2).addClass('cartloom-alert');
            $('.cartloom-body .cartloom-btn').click(function() {
                $blocked.unblock();
                if ( $(this).is('.cartloom-btn-yes') )
                    $.event.trigger('cartloom-item-delete', ['pid='+pid, pid]);
            });
            return false;
        });

        // update icon in row
        $('#cartloom-rows').delegate('.cartloom-update', 'click', function(e) {
            var $this = $(this), $row = $this.closest('tr');
            var rowContents = $row.find(':input').serialize();
            $.event.trigger('cartloom-item-update', [rowContents]);
        });
        
         // qty input (keydown, focus, change)
        $('#cartloom-rows').delegate('.cartloom-qty', 'keydown', function(e) {
            var w = e.which;
            if ((w >= 48 || w <= 57) || (w >= 96 && w <= 105))
                return true;
            return false;
        });
        $('#cartloom-rows').delegate('.cartloom-qty', 'focus', function(e) {
            this.select();
        });
        $('#cartloom-rows').delegate('.cartloom-qty', 'change', function(e) {
            var $this = $(this), $row = $this.closest('tr');
            if (0 === parseInt($this.val())) {
                $row.find('.cartloom-delete').click();
                return;
            }
            var rowContents = $row.find(':input').serialize();
            $.event.trigger('cartloom-item-update', [rowContents]);
        });
    }
    
});

//
// bootstrap
//

// Mike? it works here, should it go somewhere better?
// what happens if host page is also using blockui?
$.blockUI.defaults.css = {};
$.blockUI.defaults.overlayCSS = {};

var initialized;

function doInit() {
    if ( initialized )
        return;
    initialized = true;
    quirksmode = (msie && ! $.boxModel);
    if (quirksmode)
        $('body').addClass('cartloom-quirks');
    
    Cartloom.initialize();
}

$(document).ready( doInit );

$(window).load(function(){
    doInit();
    $('form.ydcl-addtocart :submit, form.cartloom-addtocart :submit').removeAttr('disabled');
    if ($.fn.prop)
        $('form.ydcl-addtocart :submit, form.cartloom-addtocart :submit').prop('disabled', false);
        
    // added on 2013-12-21 06:02 am
    // used when snippet is is in a modal.
    $(document).on('focus', 'form.cartloom-addtocart', function() {
    	$('form.cartloom-addtocart :submit').removeAttr('disabled');
	});
	
	
});

setTimeout( doInit, 5000 );





}; // cartloom fn


if (window.jQuery) {
    // if jQuery version is 1.7 or greater then we are good
    if ( ! /^1\.[0-6]/.test(jQuery.fn.jquery) ){
        cartloom(jQuery);
        return;
    }
}  

// load jQuery 
var script = document.createElement("script"),    
    head = document.getElementsByTagName("head")[0] || document.documentElement;

script.async = "async";
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js';
script.onload = script.onreadystatechange = function( _ , isAbort ) {
    if ( ! script.readyState || /loaded|complete/.test( script.readyState ) ) {
        script.onload = script.onreadystatechange = null;
        if ( head && script.parentNode )
            head.removeChild( script );
        script = 0;
        if ( ! isAbort ) {
            jQuery.noConflict();
            cartloom(jQuery);
        }
    }
};

head.insertBefore( script, head.firstChild );


})();
