<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
    <title>Sword &amp; Sarcasm: The Complete Series! - Faraway Press | DriveThruRPG.com</title>
    <meta name="description"
          content="Sword &amp; Sarcasm: The Complete Series! - The complete Sword &amp;amp; Sarcasm series &amp;mdash; more than 160 full-color pages! Herbert is a mercenary with heart &amp;mdash"></meta>
    <meta name="keywords" content="Faraway Press, Sword &amp; Sarcasm The Complete Series, Format, RPG, roleplaying, games, tabletop, adventures, pdf, pod"></meta>
    <meta property="og:title"
          content="Sword &amp; Sarcasm: The Complete Series! - Faraway Press | DriveThruRPG.com"/>
    <meta property="og:url"
          content="https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series"/>
    <meta property="og:image"
          content="https://www.drivethrurpg.com/images/3628/90960.jpg"/>

    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title"
          content="Sword &amp; Sarcasm: The Complete Series! - Faraway Press | DriveThruRPG.com">
    <meta name="twitter:description"
          content="The complete Sword &amp;amp; Sarcasm series &amp;mdash; more than 160 full-color pages! Herbert is a mercenary with heart &amp;mdash">
    <meta name="twitter:image"
          content="https://www.drivethrurpg.com/images/3628/90960.jpg">

    <link rel="icon" href="themes/dtrpg/favicon.ico" type="image/x-icon"/>
    <link rel="shortcut icon" href="themes/dtrpg/favicon.ico" type="image/x-icon"/>
    <link rel="image_src"
          href="https://www.drivethrurpg.com/images/3628/90960.jpg"/>
    <base href="https://www.drivethrurpg.com/"></base>
	
			<!-- Non-minified files -->
			<link type="text/css" rel="stylesheet" href="/default.css" />
			<link type="text/css" rel="stylesheet" href="/web-font-stacks.css" />
			<link type="text/css" rel="stylesheet" href="/includes/responsive.css" />
			<link type="text/css" rel="stylesheet" href="/includes/javascript/fancybox/jquery.fancybox-1.3.4.css" />
			<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/jquery.qtip.min.css" integrity="sha512-ZsHJliDVkFVbmwvOjSlsp9NhO+8Lu+qDAg0JVuXGQmh9RBgf8z1IT6tytgYVl8b6hAHUNkuhbqLFuXOkZ0VNvw==" crossorigin="anonymous" />
			<link type="text/css" rel="stylesheet" href="/includes/javascript/iscroll/iscroll.css" />
			<link type="text/css" rel="stylesheet" href="https://cdn.datatables.net/1.10.24/css/jquery.dataTables.min.css" />
			<link type="text/css" rel="stylesheet" href="/includes/javascript/jqueryui/jquery.ui.autocomplete.custom.css" />

			<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js" /></script>
			<script src="https://code.jquery.com/jquery-migrate-3.3.2.js"></script>
			<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-tools/1.2.7/jquery.tools.min.js"></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.text-overflow.min.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.dd.min.js" /></script>
			<script type="text/javascript" src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.min.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.impromptu.min.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.fileDownload.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.cookie.js" /></script>
			<script src="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/jquery.qtip.min.js" integrity="sha512-BxJRFdTKV85fhFUw+olPr0B+UEzk8FTLxRB7dAdhoQ7SXmwMECj1I4BlSmZfeoSfy0OVA8xFLTDyObu3Nv1FoQ==" crossorigin="anonymous"></script>
			<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js" integrity="sha512-rCjfoab9CVKOH/w/T6GbBxnAH5Azhy4+q1EXW5XEURefHbIkRbQ++ZR+GBClo3/d3q583X/gO4FKmOFuhkKrdA==" crossorigin="anonymous"></script>
			<script type="text/javascript" src="/includes/javascript/fancybox/jquery.fancybox-1.3.4.pack.js" /></script>
			<script type="text/javascript" src="/includes/languages/english/javascript/jquery.validationEngine-locale.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.validationEngine.js" /></script>
			<script type="text/javascript" src="/includes/javascript/site-standard.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.ellipsis.min.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery/jquery.appear.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery.obsCommon.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery.obsProducts.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery.obsPublisher.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jquery.obsBrowseAcs.js" /></script>
			<script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" /></script>
			<script type="text/javascript" src="/includes/javascript/jqueryui/jquery.ui.autocomplete.html.js" /></script>

			<script type="text/javascript">
			jQuery.curCSS = function(element, prop, val) {
				return jQuery(element).css(prop, val);
			};

			// "a.browser is undefined"
			var matched, browser;

			jQuery.uaMatch = function( ua ) {
				ua = ua.toLowerCase();

				var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
					/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
					/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
					/(msie)[\s?]([\w.]+)/.exec( ua ) ||       
					/(trident)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
					ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
					[];

				return {
					browser: match[ 1 ] || "",
					version: match[ 2 ] || "0"
				};
			};

			matched = jQuery.uaMatch( navigator.userAgent );
			//IE 11+ fix (Trident) 
			matched.browser = matched.browser == 'trident' ? 'msie' : matched.browser;
			browser = {};

			if ( matched.browser ) {
				browser[ matched.browser ] = true;
				browser.version = matched.version;
			}

			// Chrome is Webkit, but Webkit is also Safari.
			if ( browser.chrome ) {
				browser.webkit = true;
			} else if ( browser.webkit ) {
				browser.safari = true;
			}

			jQuery.browser = browser;
			</script>
		<!-- Primary CSS declarations; in minified groups -->
<link rel="stylesheet" type="text/css" media="all" href="/themes/dtrpg/960_12_10_10.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://www.drivethrurpg.com/includes/drivethru.css.php?v=1630000709&site=" />
<link rel="stylesheet" type="text/css" href="/themes/dtrpg/images/edge/ui-lightness/jquery-ui-1.8.16.custom.css" media="screen" />
<link rel="stylesheet" type="text/css" href="/themes/dtrpg/dd.css" />
<link rel="Stylesheet" type="text/css" href="/themes/dtrpg/smoothDivScroll.css" />
<!-- CSS: awesome font support -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<!-- Primrary JS declarations; in minified groups -->
<script type="text/javascript" src="/includes/javascript/spin.js"></script>
<script type="text/javascript" src="/includes/javascript/jquery/jquery.spin.js"></script>
<script type="text/javascript" src="/includes/javascript/jquery.obsPlugin.filteredComboBox.js"></script>


<!-- Attach site-wide ready events -->
<script type="text/javascript">
addLoadEvent(function() {
	$("#filter_prices_form").validationEngine('attach', {
		autoHidePrompt: true, 
		autoHideDelay: 5000
	});
    $('.pwyw-input').on('focus',function() {
        $(this).val('');
        $(this).removeClass('pwyw-default-text');
    });
    $('.pwyw-input').closest("form").on('submit',function() {
        var pwyw_inputs = $('.pwyw-input');
        var submit_pwyw = true;
        var processed_value;
        var options = document.getElementsByName('option_selection');
        var selected_value;
        var mfr_cost = 0;
        for(var i = 0; i < options.length; i++){
            if(options[i].checked){
                selected_value = options[i].value.split("|",1);
                //For multiple products, get the cumulative mfr_cost.
                if (selected_value[0].indexOf("_") > -1){
                    selected_value = selected_value[0].split("_");
                    for(var j = 0; j < selected_value.length; j++){
                        mfr_cost += parseFloat($('div.pwyw_minimum'+selected_value[j]).attr('pwyw_minimum'));
                    }
                } else {
                    mfr_cost = parseFloat($('div.pwyw_minimum'+selected_value).attr('pwyw_minimum'));
                }

            }
        }
        pwyw_inputs.each(function() {
            var user_entered_value = $(this).val();
            processed_value = user_entered_value.replace(/[,]([0-9]{2})$/,".$1")
                                                    .replace(/,/,"")
                                                    .replace(/-/,"")
                                                    .replace(/^([0-9]{1,3})([\.])([0-9]{3})/,"$1$3");
            if(isNaN(parseFloat($(this).val()))) {
                submit_pwyw = false;
            } else {
                $(this).val(processed_value);
            }
        });
        if(submit_pwyw == false) {
            obsAlert('Please enter a valid amount');
        } else if (processed_value < mfr_cost) {
            obsAlert('This product has a minimum price necessary to cover the cost of materials. Please enter a price of at least $' + mfr_cost);  
            submit_pwyw = false;
        }
        return submit_pwyw;
    });
});

</script>

<!--[if IE]>
<script type="text/javascript" src="/includes/javascript/ie-shim.js"></script>
<![endif]-->
<!-- prevent IE 9 from using IE5 quirks mode -->
<!--[if IE 9]>
<meta http-equiv="X-UA-Compatible" content="IE=9"><script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam-cell.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={xpid:"Vg4CVlRbGwEAUVRVAQUGVw==",licenseKey:"NRBR-a792f2982fda854fffd",applicationID:"205576411"};window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var i=e[n]={exports:{}};t[n][0].call(i.exports,function(e){var i=t[n][1][e];return r(i||e)},i,i.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var i=0;i<n.length;i++)r(n[i]);return r}({1:[function(t,e,n){function r(t){try{s.console&&console.log(t)}catch(e){}}var i,o=t("ee"),a=t(26),s={};try{i=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(s.console=!0,i.indexOf("dev")!==-1&&(s.dev=!0),i.indexOf("nr_dev")!==-1&&(s.nrDev=!0))}catch(c){}s.nrDev&&o.on("internal-error",function(t){r(t.stack)}),s.dev&&o.on("fn-err",function(t,e,n){r(n.stack)}),s.dev&&(r("NR AGENT IN DEVELOPMENT MODE"),r("flags: "+a(s,function(t,e){return t}).join(", ")))},{}],2:[function(t,e,n){function r(t,e,n,r,s){try{p?p-=1:i(s||new UncaughtException(t,e,n),!0)}catch(f){try{o("ierr",[f,c.now(),!0])}catch(d){}}return"function"==typeof u&&u.apply(this,a(arguments))}function UncaughtException(t,e,n){this.message=t||"Uncaught error with no additional information",this.sourceURL=e,this.line=n}function i(t,e){var n=e?null:c.now();o("err",[t,n])}var o=t("handle"),a=t(27),s=t("ee"),c=t("loader"),f=t("gos"),u=window.onerror,d=!1,l="nr@seenError";if(!c.disabled){var p=0;c.features.err=!0,t(1),window.onerror=r;try{throw new Error}catch(h){"stack"in h&&(t(10),t(9),"addEventListener"in window&&t(6),c.xhrWrappable&&t(11),d=!0)}s.on("fn-start",function(t,e,n){d&&(p+=1)}),s.on("fn-err",function(t,e,n){d&&!n[l]&&(f(n,l,function(){return!0}),this.thrown=!0,i(n))}),s.on("fn-end",function(){d&&!this.thrown&&p>0&&(p-=1)}),s.on("internal-error",function(t){o("ierr",[t,c.now(),!0])})}},{}],3:[function(t,e,n){var r=t("loader");r.disabled||(r.features.ins=!0)},{}],4:[function(t,e,n){function r(){var t=new PerformanceObserver(function(t,e){var n=t.getEntries();s(m,[n])});try{t.observe({entryTypes:["resource"]})}catch(e){}}function i(t){if(s(m,[window.performance.getEntriesByType(w)]),window.performance["c"+d])try{window.performance[p](h,i,!1)}catch(t){}else try{window.performance[p]("webkit"+h,i,!1)}catch(t){}}function o(t){}if(window.performance&&window.performance.timing&&window.performance.getEntriesByType){var a=t("ee"),s=t("handle"),c=t(10),f=t(9),u=t(5),d="learResourceTimings",l="addEventListener",p="removeEventListener",h="resourcetimingbufferfull",m="bstResource",w="resource",v="-start",g="-end",y="fn"+v,x="fn"+g,b="bstTimer",E="pushState",R=t("loader");if(!R.disabled){R.features.stn=!0,t(8),"addEventListener"in window&&t(6);var O=NREUM.o.EV;a.on(y,function(t,e){var n=t[0];n instanceof O&&(this.bstStart=R.now())}),a.on(x,function(t,e){var n=t[0];n instanceof O&&s("bst",[n,e,this.bstStart,R.now()])}),c.on(y,function(t,e,n){this.bstStart=R.now(),this.bstType=n}),c.on(x,function(t,e){s(b,[e,this.bstStart,R.now(),this.bstType])}),f.on(y,function(){this.bstStart=R.now()}),f.on(x,function(t,e){s(b,[e,this.bstStart,R.now(),"requestAnimationFrame"])}),a.on(E+v,function(t){this.time=R.now(),this.startPath=location.pathname+location.hash}),a.on(E+g,function(t){s("bstHist",[location.pathname+location.hash,this.startPath,this.time])}),u()?(s(m,[window.performance.getEntriesByType("resource")]),r()):l in window.performance&&(window.performance["c"+d]?window.performance[l](h,i,!1):window.performance[l]("webkit"+h,i,!1)),document[l]("scroll",o,{passive:!0}),document[l]("keypress",o,!1),document[l]("click",o,!1)}}},{}],5:[function(t,e,n){e.exports=function(){return"PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver}},{}],6:[function(t,e,n){function r(t){for(var e=t;e&&!e.hasOwnProperty(u);)e=Object.getPrototypeOf(e);e&&i(e)}function i(t){s.inPlace(t,[u,d],"-",o)}function o(t,e){return t[1]}var a=t("ee").get("events"),s=t("wrap-function")(a,!0),c=t("gos"),f=XMLHttpRequest,u="addEventListener",d="removeEventListener";e.exports=a,"getPrototypeOf"in Object?(r(document),r(window),r(f.prototype)):f.prototype.hasOwnProperty(u)&&(i(window),i(f.prototype)),a.on(u+"-start",function(t,e){var n=t[1],r=c(n,"nr@wrapped",function(){function t(){if("function"==typeof n.handleEvent)return n.handleEvent.apply(n,arguments)}var e={object:t,"function":n}[typeof n];return e?s(e,"fn-",null,e.name||"anonymous"):n});this.wrapped=t[1]=r}),a.on(d+"-start",function(t){t[1]=this.wrapped||t[1]})},{}],7:[function(t,e,n){function r(t,e,n){var r=t[e];"function"==typeof r&&(t[e]=function(){var t=o(arguments),e={};i.emit(n+"before-start",[t],e);var a;e[m]&&e[m].dt&&(a=e[m].dt);var s=r.apply(this,t);return i.emit(n+"start",[t,a],s),s.then(function(t){return i.emit(n+"end",[null,t],s),t},function(t){throw i.emit(n+"end",[t],s),t})})}var i=t("ee").get("fetch"),o=t(27),a=t(26);e.exports=i;var s=window,c="fetch-",f=c+"body-",u=["arrayBuffer","blob","json","text","formData"],d=s.Request,l=s.Response,p=s.fetch,h="prototype",m="nr@context";d&&l&&p&&(a(u,function(t,e){r(d[h],e,f),r(l[h],e,f)}),r(s,"fetch",c),i.on(c+"end",function(t,e){var n=this;if(e){var r=e.headers.get("content-length");null!==r&&(n.rxSize=r),i.emit(c+"done",[null,e],n)}else i.emit(c+"done",[t],n)}))},{}],8:[function(t,e,n){var r=t("ee").get("history"),i=t("wrap-function")(r);e.exports=r;var o=window.history&&window.history.constructor&&window.history.constructor.prototype,a=window.history;o&&o.pushState&&o.replaceState&&(a=o),i.inPlace(a,["pushState","replaceState"],"-")},{}],9:[function(t,e,n){var r=t("ee").get("raf"),i=t("wrap-function")(r),o="equestAnimationFrame";e.exports=r,i.inPlace(window,["r"+o,"mozR"+o,"webkitR"+o,"msR"+o],"raf-"),r.on("raf-start",function(t){t[0]=i(t[0],"fn-")})},{}],10:[function(t,e,n){function r(t,e,n){t[0]=a(t[0],"fn-",null,n)}function i(t,e,n){this.method=n,this.timerDuration=isNaN(t[1])?0:+t[1],t[0]=a(t[0],"fn-",this,n)}var o=t("ee").get("timer"),a=t("wrap-function")(o),s="setTimeout",c="setInterval",f="clearTimeout",u="-start",d="-";e.exports=o,a.inPlace(window,[s,"setImmediate"],s+d),a.inPlace(window,[c],c+d),a.inPlace(window,[f,"clearImmediate"],f+d),o.on(c+u,r),o.on(s+u,i)},{}],11:[function(t,e,n){function r(t,e){d.inPlace(e,["onreadystatechange"],"fn-",s)}function i(){var t=this,e=u.context(t);t.readyState>3&&!e.resolved&&(e.resolved=!0,u.emit("xhr-resolved",[],t)),d.inPlace(t,g,"fn-",s)}function o(t){y.push(t),h&&(b?b.then(a):w?w(a):(E=-E,R.data=E))}function a(){for(var t=0;t<y.length;t++)r([],y[t]);y.length&&(y=[])}function s(t,e){return e}function c(t,e){for(var n in t)e[n]=t[n];return e}t(6);var f=t("ee"),u=f.get("xhr"),d=t("wrap-function")(u),l=NREUM.o,p=l.XHR,h=l.MO,m=l.PR,w=l.SI,v="readystatechange",g=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],y=[];e.exports=u;var x=window.XMLHttpRequest=function(t){var e=new p(t);try{u.emit("new-xhr",[e],e),e.addEventListener(v,i,!1)}catch(n){try{u.emit("internal-error",[n])}catch(r){}}return e};if(c(p,x),x.prototype=p.prototype,d.inPlace(x.prototype,["open","send"],"-xhr-",s),u.on("send-xhr-start",function(t,e){r(t,e),o(e)}),u.on("open-xhr-start",r),h){var b=m&&m.resolve();if(!w&&!m){var E=1,R=document.createTextNode(E);new h(a).observe(R,{characterData:!0})}}else f.on("fn-end",function(t){t[0]&&t[0].type===v||a()})},{}],12:[function(t,e,n){function r(t){if(!s(t))return null;var e=window.NREUM;if(!e.loader_config)return null;var n=(e.loader_config.accountID||"").toString()||null,r=(e.loader_config.agentID||"").toString()||null,f=(e.loader_config.trustKey||"").toString()||null;if(!n||!r)return null;var h=p.generateSpanId(),m=p.generateTraceId(),w=Date.now(),v={spanId:h,traceId:m,timestamp:w};return(t.sameOrigin||c(t)&&l())&&(v.traceContextParentHeader=i(h,m),v.traceContextStateHeader=o(h,w,n,r,f)),(t.sameOrigin&&!u()||!t.sameOrigin&&c(t)&&d())&&(v.newrelicHeader=a(h,m,w,n,r,f)),v}function i(t,e){return"00-"+e+"-"+t+"-01"}function o(t,e,n,r,i){var o=0,a="",s=1,c="",f="";return i+"@nr="+o+"-"+s+"-"+n+"-"+r+"-"+t+"-"+a+"-"+c+"-"+f+"-"+e}function a(t,e,n,r,i,o){var a="btoa"in window&&"function"==typeof window.btoa;if(!a)return null;var s={v:[0,1],d:{ty:"Browser",ac:r,ap:i,id:t,tr:e,ti:n}};return o&&r!==o&&(s.d.tk=o),btoa(JSON.stringify(s))}function s(t){return f()&&c(t)}function c(t){var e=!1,n={};if("init"in NREUM&&"distributed_tracing"in NREUM.init&&(n=NREUM.init.distributed_tracing),t.sameOrigin)e=!0;else if(n.allowed_origins instanceof Array)for(var r=0;r<n.allowed_origins.length;r++){var i=h(n.allowed_origins[r]);if(t.hostname===i.hostname&&t.protocol===i.protocol&&t.port===i.port){e=!0;break}}return e}function f(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&!!NREUM.init.distributed_tracing.enabled}function u(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&!!NREUM.init.distributed_tracing.exclude_newrelic_header}function d(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&NREUM.init.distributed_tracing.cors_use_newrelic_header!==!1}function l(){return"init"in NREUM&&"distributed_tracing"in NREUM.init&&!!NREUM.init.distributed_tracing.cors_use_tracecontext_headers}var p=t(23),h=t(14);e.exports={generateTracePayload:r,shouldGenerateTrace:s}},{}],13:[function(t,e,n){function r(t){var e=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var r=0;r<l;r++)t.removeEventListener(d[r],this.listener,!1);e.aborted||(n.duration=a.now()-this.startTime,this.loadCaptureCalled||4!==t.readyState?null==e.status&&(e.status=0):o(this,t),n.cbTime=this.cbTime,s("xhr",[e,n,this.startTime,this.endTime,"xhr"],this))}}function i(t,e){var n=c(e),r=t.params;r.hostname=n.hostname,r.port=n.port,r.protocol=n.protocol,r.host=n.hostname+":"+n.port,r.pathname=n.pathname,t.parsedOrigin=n,t.sameOrigin=n.sameOrigin}function o(t,e){t.params.status=e.status;var n=w(e,t.lastSize);if(n&&(t.metrics.rxSize=n),t.sameOrigin){var r=e.getResponseHeader("X-NewRelic-App-Data");r&&(t.params.cat=r.split(", ").pop())}t.loadCaptureCalled=!0}var a=t("loader");if(a.xhrWrappable&&!a.disabled){var s=t("handle"),c=t(14),f=t(12).generateTracePayload,u=t("ee"),d=["load","error","abort","timeout"],l=d.length,p=t("id"),h=t(19),m=t(18),w=t(15),v=NREUM.o.REQ,g=window.XMLHttpRequest;a.features.xhr=!0,t(11),t(7),u.on("new-xhr",function(t){var e=this;e.totalCbs=0,e.called=0,e.cbTime=0,e.end=r,e.ended=!1,e.xhrGuids={},e.lastSize=null,e.loadCaptureCalled=!1,e.params=this.params||{},e.metrics=this.metrics||{},t.addEventListener("load",function(n){o(e,t)},!1),h&&(h>34||h<10)||t.addEventListener("progress",function(t){e.lastSize=t.loaded},!1)}),u.on("open-xhr-start",function(t){this.params={method:t[0]},i(this,t[1]),this.metrics={}}),u.on("open-xhr-end",function(t,e){"loader_config"in NREUM&&"xpid"in NREUM.loader_config&&this.sameOrigin&&e.setRequestHeader("X-NewRelic-ID",NREUM.loader_config.xpid);var n=f(this.parsedOrigin);if(n){var r=!1;n.newrelicHeader&&(e.setRequestHeader("newrelic",n.newrelicHeader),r=!0),n.traceContextParentHeader&&(e.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&e.setRequestHeader("tracestate",n.traceContextStateHeader),r=!0),r&&(this.dt=n)}}),u.on("send-xhr-start",function(t,e){var n=this.metrics,r=t[0],i=this;if(n&&r){var o=m(r);o&&(n.txSize=o)}this.startTime=a.now(),this.listener=function(t){try{"abort"!==t.type||i.loadCaptureCalled||(i.params.aborted=!0),("load"!==t.type||i.called===i.totalCbs&&(i.onloadCalled||"function"!=typeof e.onload))&&i.end(e)}catch(n){try{u.emit("internal-error",[n])}catch(r){}}};for(var s=0;s<l;s++)e.addEventListener(d[s],this.listener,!1)}),u.on("xhr-cb-time",function(t,e,n){this.cbTime+=t,e?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof n.onload||this.end(n)}),u.on("xhr-load-added",function(t,e){var n=""+p(t)+!!e;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}),u.on("xhr-load-removed",function(t,e){var n=""+p(t)+!!e;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}),u.on("xhr-resolved",function(){this.endTime=a.now()}),u.on("addEventListener-end",function(t,e){e instanceof g&&"load"===t[0]&&u.emit("xhr-load-added",[t[1],t[2]],e)}),u.on("removeEventListener-end",function(t,e){e instanceof g&&"load"===t[0]&&u.emit("xhr-load-removed",[t[1],t[2]],e)}),u.on("fn-start",function(t,e,n){e instanceof g&&("onload"===n&&(this.onload=!0),("load"===(t[0]&&t[0].type)||this.onload)&&(this.xhrCbStart=a.now()))}),u.on("fn-end",function(t,e){this.xhrCbStart&&u.emit("xhr-cb-time",[a.now()-this.xhrCbStart,this.onload,e],e)}),u.on("fetch-before-start",function(t){function e(t,e){var n=!1;return e.newrelicHeader&&(t.set("newrelic",e.newrelicHeader),n=!0),e.traceContextParentHeader&&(t.set("traceparent",e.traceContextParentHeader),e.traceContextStateHeader&&t.set("tracestate",e.traceContextStateHeader),n=!0),n}var n,r=t[1]||{};"string"==typeof t[0]?n=t[0]:t[0]&&t[0].url?n=t[0].url:window.URL&&t[0]&&t[0]instanceof URL&&(n=t[0].href),n&&(this.parsedOrigin=c(n),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=f(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if("string"==typeof t[0]||window.URL&&t[0]&&t[0]instanceof URL){var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),e(o.headers,i)&&(this.dt=i),t.length>1?t[1]=o:t.push(o)}else t[0]&&t[0].headers&&e(t[0].headers,i)&&(this.dt=i)}),u.on("fetch-start",function(t,e){this.params={},this.metrics={},this.startTime=a.now(),this.dt=e,t.length>=1&&(this.target=t[0]),t.length>=2&&(this.opts=t[1]);var n,r=this.opts||{},o=this.target;"string"==typeof o?n=o:"object"==typeof o&&o instanceof v?n=o.url:window.URL&&"object"==typeof o&&o instanceof URL&&(n=o.href),i(this,n);var s=(""+(o&&o instanceof v&&o.method||r.method||"GET")).toUpperCase();this.params.method=s,this.txSize=m(r.body)||0}),u.on("fetch-done",function(t,e){this.endTime=a.now(),this.params||(this.params={}),this.params.status=e?e.status:0;var n;"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var r={txSize:this.txSize,rxSize:n,duration:a.now()-this.startTime};s("xhr",[this.params,r,this.startTime,this.endTime,"fetch"],this)})}},{}],14:[function(t,e,n){var r={};e.exports=function(t){if(t in r)return r[t];var e=document.createElement("a"),n=window.location,i={};e.href=t,i.port=e.port;var o=e.href.split("://");!i.port&&o[1]&&(i.port=o[1].split("/")[0].split("@").pop().split(":")[1]),i.port&&"0"!==i.port||(i.port="https"===o[0]?"443":"80"),i.hostname=e.hostname||n.hostname,i.pathname=e.pathname,i.protocol=o[0],"/"!==i.pathname.charAt(0)&&(i.pathname="/"+i.pathname);var a=!e.protocol||":"===e.protocol||e.protocol===n.protocol,s=e.hostname===document.domain&&e.port===n.port;return i.sameOrigin=a&&(!e.hostname||s),"/"===i.pathname&&(r[t]=i),i}},{}],15:[function(t,e,n){function r(t,e){var n=t.responseType;return"json"===n&&null!==e?e:"arraybuffer"===n||"blob"===n||"json"===n?i(t.response):"text"===n||""===n||void 0===n?i(t.responseText):void 0}var i=t(18);e.exports=r},{}],16:[function(t,e,n){function r(){}function i(t,e,n){return function(){return o(t,[f.now()].concat(s(arguments)),e?null:this,n),e?void 0:this}}var o=t("handle"),a=t(26),s=t(27),c=t("ee").get("tracer"),f=t("loader"),u=NREUM;"undefined"==typeof window.newrelic&&(newrelic=u);var d=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],l="api-",p=l+"ixn-";a(d,function(t,e){u[e]=i(l+e,!0,"api")}),u.addPageAction=i(l+"addPageAction",!0),u.setCurrentRouteName=i(l+"routeName",!0),e.exports=newrelic,u.interaction=function(){return(new r).get()};var h=r.prototype={createTracer:function(t,e){var n={},r=this,i="function"==typeof e;return o(p+"tracer",[f.now(),t,n],r),function(){if(c.emit((i?"":"no-")+"fn-start",[f.now(),r,i],n),i)try{return e.apply(this,arguments)}catch(t){throw c.emit("fn-err",[arguments,this,t],n),t}finally{c.emit("fn-end",[f.now()],n)}}}};a("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(t,e){h[e]=i(p+e)}),newrelic.noticeError=function(t,e){"string"==typeof t&&(t=new Error(t)),o("err",[t,f.now(),!1,e])}},{}],17:[function(t,e,n){function r(t){if(NREUM.init){for(var e=NREUM.init,n=t.split("."),r=0;r<n.length-1;r++)if(e=e[n[r]],"object"!=typeof e)return;return e=e[n[n.length-1]]}}e.exports={getConfiguration:r}},{}],18:[function(t,e,n){e.exports=function(t){if("string"==typeof t&&t.length)return t.length;if("object"==typeof t){if("undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer&&t.byteLength)return t.byteLength;if("undefined"!=typeof Blob&&t instanceof Blob&&t.size)return t.size;if(!("undefined"!=typeof FormData&&t instanceof FormData))try{return JSON.stringify(t).length}catch(e){return}}}},{}],19:[function(t,e,n){var r=0,i=navigator.userAgent.match(/Firefox[\/\s](\d+\.\d+)/);i&&(r=+i[1]),e.exports=r},{}],20:[function(t,e,n){function r(){return s.exists&&performance.now?Math.round(performance.now()):(o=Math.max((new Date).getTime(),o))-a}function i(){return o}var o=(new Date).getTime(),a=o,s=t(28);e.exports=r,e.exports.offset=a,e.exports.getLastTimestamp=i},{}],21:[function(t,e,n){function r(t){return!(!t||!t.protocol||"file:"===t.protocol)}e.exports=r},{}],22:[function(t,e,n){function r(t,e){var n=t.getEntries();n.forEach(function(t){"first-paint"===t.name?d("timing",["fp",Math.floor(t.startTime)]):"first-contentful-paint"===t.name&&d("timing",["fcp",Math.floor(t.startTime)])})}function i(t,e){var n=t.getEntries();n.length>0&&d("lcp",[n[n.length-1]])}function o(t){t.getEntries().forEach(function(t){t.hadRecentInput||d("cls",[t])})}function a(t){if(t instanceof h&&!w){var e=Math.round(t.timeStamp),n={type:t.type};e<=l.now()?n.fid=l.now()-e:e>l.offset&&e<=Date.now()?(e-=l.offset,n.fid=l.now()-e):e=l.now(),w=!0,d("timing",["fi",e,n])}}function s(t){"hidden"===t&&d("pageHide",[l.now()])}if(!("init"in NREUM&&"page_view_timing"in NREUM.init&&"enabled"in NREUM.init.page_view_timing&&NREUM.init.page_view_timing.enabled===!1)){var c,f,u,d=t("handle"),l=t("loader"),p=t(25),h=NREUM.o.EV;if("PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver){c=new PerformanceObserver(r);try{c.observe({entryTypes:["paint"]})}catch(m){}f=new PerformanceObserver(i);try{f.observe({entryTypes:["largest-contentful-paint"]})}catch(m){}u=new PerformanceObserver(o);try{u.observe({type:"layout-shift",buffered:!0})}catch(m){}}if("addEventListener"in document){var w=!1,v=["click","keydown","mousedown","pointerdown","touchstart"];v.forEach(function(t){document.addEventListener(t,a,!1)})}p(s)}},{}],23:[function(t,e,n){function r(){function t(){return e?15&e[n++]:16*Math.random()|0}var e=null,n=0,r=window.crypto||window.msCrypto;r&&r.getRandomValues&&(e=r.getRandomValues(new Uint8Array(31)));for(var i,o="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",a="",s=0;s<o.length;s++)i=o[s],"x"===i?a+=t().toString(16):"y"===i?(i=3&t()|8,a+=i.toString(16)):a+=i;return a}function i(){return a(16)}function o(){return a(32)}function a(t){function e(){return n?15&n[r++]:16*Math.random()|0}var n=null,r=0,i=window.crypto||window.msCrypto;i&&i.getRandomValues&&Uint8Array&&(n=i.getRandomValues(new Uint8Array(31)));for(var o=[],a=0;a<t;a++)o.push(e().toString(16));return o.join("")}e.exports={generateUuid:r,generateSpanId:i,generateTraceId:o}},{}],24:[function(t,e,n){function r(t,e){if(!i)return!1;if(t!==i)return!1;if(!e)return!0;if(!o)return!1;for(var n=o.split("."),r=e.split("."),a=0;a<r.length;a++)if(r[a]!==n[a])return!1;return!0}var i=null,o=null,a=/Version\/(\S+)\s+Safari/;if(navigator.userAgent){var s=navigator.userAgent,c=s.match(a);c&&s.indexOf("Chrome")===-1&&s.indexOf("Chromium")===-1&&(i="Safari",o=c[1])}e.exports={agent:i,version:o,match:r}},{}],25:[function(t,e,n){function r(t){function e(){t(a&&document[a]?document[a]:document[i]?"hidden":"visible")}"addEventListener"in document&&o&&document.addEventListener(o,e,!1)}e.exports=r;var i,o,a;"undefined"!=typeof document.hidden?(i="hidden",o="visibilitychange",a="visibilityState"):"undefined"!=typeof document.msHidden?(i="msHidden",o="msvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(i="webkitHidden",o="webkitvisibilitychange",a="webkitVisibilityState")},{}],26:[function(t,e,n){function r(t,e){var n=[],r="",o=0;for(r in t)i.call(t,r)&&(n[o]=e(r,t[r]),o+=1);return n}var i=Object.prototype.hasOwnProperty;e.exports=r},{}],27:[function(t,e,n){function r(t,e,n){e||(e=0),"undefined"==typeof n&&(n=t?t.length:0);for(var r=-1,i=n-e||0,o=Array(i<0?0:i);++r<i;)o[r]=t[e+r];return o}e.exports=r},{}],28:[function(t,e,n){e.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(t,e,n){function r(){}function i(t){function e(t){return t&&t instanceof r?t:t?f(t,c,a):a()}function n(n,r,i,o,a){if(a!==!1&&(a=!0),!p.aborted||o){t&&a&&t(n,r,i);for(var s=e(i),c=m(n),f=c.length,u=0;u<f;u++)c[u].apply(s,r);var l=d[y[n]];return l&&l.push([x,n,r,s]),s}}function o(t,e){g[t]=m(t).concat(e)}function h(t,e){var n=g[t];if(n)for(var r=0;r<n.length;r++)n[r]===e&&n.splice(r,1)}function m(t){return g[t]||[]}function w(t){return l[t]=l[t]||i(n)}function v(t,e){p.aborted||u(t,function(t,n){e=e||"feature",y[n]=e,e in d||(d[e]=[])})}var g={},y={},x={on:o,addEventListener:o,removeEventListener:h,emit:n,get:w,listeners:m,context:e,buffer:v,abort:s,aborted:!1};return x}function o(t){return f(t,c,a)}function a(){return new r}function s(){(d.api||d.feature)&&(p.aborted=!0,d=p.backlog={})}var c="nr@context",f=t("gos"),u=t(26),d={},l={},p=e.exports=i();e.exports.getOrSetContext=o,p.backlog=d},{}],gos:[function(t,e,n){function r(t,e,n){if(i.call(t,e))return t[e];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!1}),r}catch(o){}return t[e]=r,r}var i=Object.prototype.hasOwnProperty;e.exports=r},{}],handle:[function(t,e,n){function r(t,e,n,r){i.buffer([t],r),i.emit(t,e,n)}var i=t("ee").get("handle");e.exports=r,r.ee=i},{}],id:[function(t,e,n){function r(t){var e=typeof t;return!t||"object"!==e&&"function"!==e?-1:t===window?0:a(t,o,function(){return i++})}var i=1,o="nr@id",a=t("gos");e.exports=r},{}],loader:[function(t,e,n){function r(){if(!S++){var t=O.info=NREUM.info,e=m.getElementsByTagName("script")[0];if(setTimeout(f.abort,3e4),!(t&&t.licenseKey&&t.applicationID&&e))return f.abort();c(E,function(e,n){t[e]||(t[e]=n)});var n=a();s("mark",["onload",n+O.offset],null,"api"),s("timing",["load",n]);var r=m.createElement("script");0===t.agent.indexOf("http://")||0===t.agent.indexOf("https://")?r.src=t.agent:r.src=p+"://"+t.agent,e.parentNode.insertBefore(r,e)}}function i(){"complete"===m.readyState&&o()}function o(){s("mark",["domContent",a()+O.offset],null,"api")}var a=t(20),s=t("handle"),c=t(26),f=t("ee"),u=t(24),d=t(21),l=t(17),p=l.getConfiguration("ssl")===!1?"http":"https",h=window,m=h.document,w="addEventListener",v="attachEvent",g=h.XMLHttpRequest,y=g&&g.prototype,x=!d(h.location);NREUM.o={ST:setTimeout,SI:h.setImmediate,CT:clearTimeout,XHR:g,REQ:h.Request,EV:h.Event,PR:h.Promise,MO:h.MutationObserver};var b=""+location,E={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1211.min.js"},R=g&&y&&y[w]&&!/CriOS/.test(navigator.userAgent),O=e.exports={offset:a.getLastTimestamp(),now:a,origin:b,features:{},xhrWrappable:R,userAgent:u,disabled:x};if(!x){t(16),t(22),m[w]?(m[w]("DOMContentLoaded",o,!1),h[w]("load",r,!1)):(m[v]("onreadystatechange",i),h[v]("onload",r)),s("mark",["firstbyte",a.getLastTimestamp()],null,"api");var S=0}},{}],"wrap-function":[function(t,e,n){function r(t,e){function n(e,n,r,c,f){function nrWrapper(){var o,a,u,l;try{a=this,o=d(arguments),u="function"==typeof r?r(o,a):r||{}}catch(p){i([p,"",[o,a,c],u],t)}s(n+"start",[o,a,c],u,f);try{return l=e.apply(a,o)}catch(h){throw s(n+"err",[o,a,h],u,f),h}finally{s(n+"end",[o,a,l],u,f)}}return a(e)?e:(n||(n=""),nrWrapper[l]=e,o(e,nrWrapper,t),nrWrapper)}function r(t,e,r,i,o){r||(r="");var s,c,f,u="-"===r.charAt(0);for(f=0;f<e.length;f++)c=e[f],s=t[c],a(s)||(t[c]=n(s,u?c+r:r,i,c,o))}function s(n,r,o,a){if(!h||e){var s=h;h=!0;try{t.emit(n,r,o,e,a)}catch(c){i([c,n,r,o],t)}h=s}}return t||(t=u),n.inPlace=r,n.flag=l,n}function i(t,e){e||(e=u);try{e.emit("internal-error",t)}catch(n){}}function o(t,e,n){if(Object.defineProperty&&Object.keys)try{var r=Object.keys(t);return r.forEach(function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){return t[n]=e,e}})}),e}catch(o){i([o],n)}for(var a in t)p.call(t,a)&&(e[a]=t[a]);return e}function a(t){return!(t&&t instanceof Function&&t.apply&&!t[l])}function s(t,e){var n=e(t);return n[l]=t,o(t,n,u),n}function c(t,e,n){var r=t[e];t[e]=s(r,n)}function f(){for(var t=arguments.length,e=new Array(t),n=0;n<t;++n)e[n]=arguments[n];return e}var u=t("ee"),d=t(27),l="nr@original",p=Object.prototype.hasOwnProperty,h=!1;e.exports=r,e.exports.wrapFunction=s,e.exports.wrapInPlace=c,e.exports.argsToArray=f},{}]},{},["loader",2,13,4,3]);</script>
<![endif]-->

<script type="text/javascript">
// Detect if cookies are enabled, and forward user to "cookies required" page if not
var cookieEnabled = (navigator.cookieEnabled) ? true : false;
if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) { 
	document.cookie="testcookie";
	cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
}
if (!cookieEnabled && document.URL.indexOf("cookie_usage.php")==-1) {
	window.location = '/cookie_usage.php';
}
</script>
<script type="text/javascript" src="https://www.dropbox.com/static/api/2/dropins.js" id="dropboxjs" data-app-key="7xobd4naba6t36f"></script>

	<script type="text/javascript">

// begin jQuery functions
(function($) {
	$(document).ready(function() {

		// for qtip2
		$('.qtip_update_info').each(function() {
 			$(this).qtip({
				content: {
					//attr: 'alt'
					text: $(this).find('.qtip_tooltip')
				},
				position: {
					at: 'right top',
					my: 'left top',
					viewport: $(window),
					effect: false
				},
				show: {
					event: 'mouseover click',
					solo: true
				},
				hide: {
					event: 'mouseout'
				},
				style: {
					classes: 'qtip-light qtip-shadow qtip-rounded',
					tip: {
						corner: false,
						offset: 5
					}
				}
			})
		});
	});

}) (jQuery);
// end jQuery functions


</script>
	<link rel="canonical" href="https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series" />

	<script type="text/javascript">
/*!
 * jQuery Raty - A Star Rating Plugin - http://wbotelhos.com/raty
 * ---------------------------------------------------------------------
 *
 * jQuery Raty is a plugin that generates a customizable star rating.
 *
 * Licensed under The MIT License
 *
 * @version        2.0.0
 * @since          2010.06.11
 * @author         Washington Botelho
 * @documentation  wbotelhos.com/raty
 * @twitter        twitter.com/wbotelhos
 *
 * Usage with default values:
 * ---------------------------------------------------------------------
 * $('#star').raty();
 *
 * <div id="star"></div>
 *
 * $('.star').raty();
 *
 * <div class="star"></div>
 * <div class="star"></div>
 * <div class="star"></div>
 *
 */

;(function($) {

	var methods = {
		init: function(options) {
			return this.each(function() {

				var opt		= $.extend({}, $.fn.raty.defaults, options),
					$this	= $(this).data('options', opt),
					id		= $this.attr('id');

				if (id === undefined || id == '') {
					id = 'raty-' + $('.' + $this.attr('class')).index(this);
					$this.attr('id', id); 
				}

				if (opt.number > 20) {
					opt.number = 20;
				} else if (opt.number < 0) {
					opt.number = 0;
				}

				if (opt.round.down === undefined) {
					opt.round.down = $.fn.raty.defaults.round.down;
				}

				if (opt.round.full === undefined) {
					opt.round.full = $.fn.raty.defaults.round.full;
				}

				if (opt.round.up === undefined) {
					opt.round.up = $.fn.raty.defaults.round.up;
				}

				if (opt.path.substring(opt.path.length - 1, opt.path.length) != '/') {
					opt.path += '/';
				}

				if (typeof opt.start == 'function') {
					opt.start = opt.start.call(this);
				}

				var isValidStart	= !isNaN(parseInt(opt.start, 10)),
					start			= '';

				if (isValidStart) {
					start = (opt.start > opt.number) ? opt.number : opt.start;
				} 

				var starFile	= opt.starOn,
					space		= (opt.space) ? 4 : 0,
					hint		= '';

				for (var i = 1; i <= opt.number; i++) {
					starFile = (start < i) ? opt.starOff : opt.starOn;

					//hint = (i <= opt.hintList.length && opt.hintList[i - 1] !== null) ? opt.hintList[i - 1] : i;
                    hint = i + ' / ' + opt.hintList.length;

					$this.append('<img id="' + id + '-' + i + '" src="' + opt.path + starFile + '" alt="' + i + '" title="' + hint + '" class="' + id + '"/>');

					if (opt.space) {
						$this.append((i < opt.number) ? '&nbsp;' : '');
					}
				}

				var $score = $('<input/>', { id: id + '-score', type: 'hidden', name: opt.scoreName}).appendTo($this);

				if (isValidStart) {
					if (opt.start > 0) {
						$score.val(start);
					}

					methods.roundStar.call($this, start);
				}

				if (opt.iconRange) {
					methods.fillStar.call($this, start);	
				}

				methods.setTarget.call($this, start, opt.targetKeep);

				var width = opt.width || (opt.number * opt.size + opt.number * space);

				if (opt.cancel) {
					var $cancel = $('<img src="' + opt.path + opt.cancelOff + '" alt="x" title="' + opt.cancelHint + '" class="raty-cancel"/>');

					if (opt.cancelPlace == 'left') {
						$this.prepend('&nbsp;').prepend($cancel);
					} else {
						$this.append('&nbsp;').append($cancel);
					}

					var $stars = $this.children('img.' + id);

					$cancel.mouseenter(function() {
						$(this).attr('src', opt.path + opt.cancelOn);

						$stars.attr('src', opt.path + opt.starOff);

						methods.setTarget.call($this, null, true);
					}).mouseleave(function() {
						$(this).attr('src', opt.path + opt.cancelOff);

						$this.mouseout();
					}).click(function(evt) {
						$score.removeAttr('value');

						if (opt.click) {
				          opt.click.call($this[0], null, evt);
				        }
					});

					width += opt.size + space;
				}

				if (opt.readOnly) {
					methods.fixHint.call($this);

					$this.children('.raty-cancel').hide();
				} else {
					$this.css('cursor', 'pointer');

					methods.bindAction.call($this);
				}

				$this.css('width', width);
			});
		}, bindAction: function() {
			var $this	= this,
				opt		= this.data('options'),
				$score	= this.children('input');

			this.mouseleave(function() {
				methods.initialize.call($this, $score.val());

				methods.setTarget.call($this, $score.val(), opt.targetKeep);
			});

			var $stars	= this.children('img.' + this.attr('id')),
				action	= (opt.half) ? 'mousemove' : 'mouseover';
			$stars.bind(action, function(evt) {
				var value = parseInt(this.alt, 10);

				if (opt.half) {
					var position	= parseFloat((evt.pageX - $(this).offset().left) / opt.size),
						diff		= (position > .5) ? 1 : .5;

					value = parseFloat(this.alt) - 1 + diff;

					methods.fillStar.call($this, value);

					if (opt.precision) {
						value = value - diff + position;
					}

					methods.showHalf.call($this, value);
				} else {
					methods.fillStar.call($this, value);
				}

				$this.data('score', value);

				methods.setTarget.call($this, value, true);
			}).click(function(evt) {
				$score.val((opt.half || opt.precision) ? $this.data('score') : this.alt);

				if (opt.click) {
					opt.click.call($this[0], $score.val(), evt);
				}
			});
		}, cancel: function(isClick) {
			return this.each(function() {
				var $this = $(this);

				if ($this.data('readonly') == 'readonly') {
					return false;
				}

				if (isClick) {
					methods.click.call($this, null);
				} else {
					methods.start.call($this, null);
				}

				$this.mouseleave().children('input').removeAttr('value');
			});
		}, click: function(score) {
			return this.each(function() {
				var $this = $(this);

				if ($this.data('readonly') == 'readonly') {
					return false;
				}

				methods.initialize.call($this, score);

				var opt = $this.data('options');

				if (opt.click) {
					opt.click.call($this[0], score);
				} else {
					$.error($this.attr('id') + ': you must add the "click: function(score, evt) { }" callback.');
				}

				methods.setTarget.call($this, score, true);
			});
		}, fillStar: function(score) {
			var opt		= this.data('options'),
				id		= this.attr('id'),
				qtyStar	= this.children('img.' + id).length,
				count	= 0,
				$star	,
				star	,
				icon	;

			for (var i = 1; i <= qtyStar; i++) {
				$star = this.children('#' + id + '-' + i);

				if (opt.iconRange && opt.iconRange.length > count) {
					star = opt.iconRange[count];

					if (opt.single) {
						icon = (i == score) ? (star.on || opt.starOn) : (star.off || opt.starOff);
					} else {
						icon = (i <= score) ? (star.on || opt.starOn) : (star.off || opt.starOff);
					}

					if (i <= star.range) {
						$star.attr('src', opt.path + icon);
					}

					if (i == star.range) {
						count++;
					}
				} else {
					if (opt.single) {
						icon = (i == score) ? opt.starOn : opt.starOff;
					} else {
						icon = (i <= score) ? opt.starOn : opt.starOff;
					}

					$star.attr('src', opt.path + icon);
				}
			}
		}, fixHint: function() {
			var opt		= this.data('options'),
				$score	= this.children('input'),
				score	= parseFloat($score.val()),
				hint	= opt.noRatedMsg;

			if (!isNaN(score) && score > 0) {
				//hint = (score <= opt.hintList.length && opt.hintList[score - 1] !== null) ? opt.hintList[score - 1] : score;
                hint = score + ' / ' + opt.hintList.length;
			}

			$score.attr('readonly', 'readonly');
			this.css('cursor', 'default').data('readonly', 'readonly').attr('title', hint).children('img').attr('title', hint);
		}, readOnly: function(isReadOnly) {
			return this.each(function() {
				var $this	= $(this),
					cancel	= $this.children('.raty-cancel');

				if (cancel.length) {
					(isReadOnly) ? cancel.hide() : cancel.show();
				}

				if (isReadOnly) {
					$this.unbind();

					$('img.' + $this.attr('id')).unbind();

					methods.fixHint.call($this);
				} else {
					methods.bindAction.call($this);

					methods.unfixHint.call($this);
				}
			});
		}, roundStar: function(score) {
			var opt		= this.data('options'),
				diff	= (score - Math.floor(score)).toFixed(2);

			if (diff > opt.round.down) {
				var icon = opt.starOn;						// Full up: [x.76 .. x.99]

				if (diff < opt.round.up && opt.halfShow) {	// Half: [x.26 .. x.75]
					icon = opt.starHalf;
				} else if (diff < opt.round.full) {		// Full down: [x.00 .. x.5]
					icon = opt.starOff;
				}

				$('img#' + this.attr('id') + '-' + Math.ceil(score)).attr('src', opt.path + icon);
			}												// Full down: [x.00 .. x.25]
		}, setTarget: function(value, isKeep) {
			var opt = this.data('options');

			if (opt.target) {
				var $target = $(opt.target);

				if ($target.length == 0) {
					$.error(this.attr('id') + ': target selector invalid or missing!');
				} else {
					var score = value;

					if (score == null && !opt.cancel) {
						$.error(this.attr('id') + ': you must enable the "cancel" option to set hint on target.');
					} else {
						if (!isKeep || score == '') {
							score = opt.targetText;
						} else {
							if (opt.targetType == 'hint') {
								if (score === null && opt.cancel) {
									score = opt.cancelHint;
								} else {
									score = opt.hintList[Math.ceil(score - 1)];
								}
							} else {
								if (score != '' && !opt.precision) {
									score = parseInt(score, 10);
								} else {
									score = parseFloat(score).toFixed(1);
								}
							}
						}

						if (opt.targetFormat.indexOf('{score}') < 0) {
							$.error(this.attr('id') + ': template "{score}" missing!');
						} else if (value !== null) {
							score = opt.targetFormat.toString().replace('{score}', score);
						}

						if ($target.is(':input')) {
							$target.val(score);
						} else {
							$target.html(score);
						}
					}
				}
			}
		}, showHalf: function(score) {
			var opt		= this.data('options'),
				diff	= (score - Math.floor(score)).toFixed(1);

			if (diff > 0 && diff < .6) {
				$('img#' + this.attr('id') + '-' + Math.ceil(score)).attr('src', opt.path + opt.starHalf);
			}
		}, start: function(score) {
			return this.each(function() {
				var $this = $(this);

				if ($this.data('readonly') == 'readonly') {
					return false;
				}

				methods.initialize.call($this, score);

				var opt = $this.data('options');

				methods.setTarget.call($this, score, true);
			});
		}, initialize: function(score) {
			var opt	= this.data('options'),
				id	= this.attr('id');

			if (score < 0) {
				score = 0;
			} else if (score > opt.number) {
				score = opt.number;
			}

			methods.fillStar.call(this, score);

			if (score != '') {
				if (opt.halfShow) {
					methods.roundStar.call(this, score);
				}

				$('input#' + id + '-score').val(score);
			}
		}, unfixHint: function() {
			var opt		= this.data('options'),
				$imgs	= this.children('img').filter(':not(.raty-cancel)');

			for (var i = 0; i < opt.number; i++) {
				$imgs.eq(i).attr('title', (i < opt.hintList.length && opt.hintList[i] !== null) ? opt.hintList[i] : i);
			}

			this.css('cursor', 'pointer').removeData('readonly').removeAttr('title').children('input').attr('readonly', 'readonly');
		}
	};

	$.fn.raty = function(method) {
		if (methods[method]) {
			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
		} else if (typeof method === 'object' || !method) {
			return methods.init.apply(this, arguments);
		} else {
			$.error('Method ' + method + ' does not exist!');
		} 
	};

	$.fn.raty.defaults = {
		cancel:			false,
		cancelHint:		'cancel this rating!',
		cancelOff:		'cancel-off.png',
		cancelOn:		'cancel-on.png',
		cancelPlace:	'left',
		click:			undefined,
		half:			false,
		halfShow:		true,
		iconRange:		undefined,
		noRatedMsg:		'not rated yet',
		number:			5,
		precision:		1,
		round:			{ down: .25, full: .6, up: .9 },
		readOnly:		false,
		scoreName:		'score',
		single:			false,
		size:			16,
		space:			true,
		start:			0,
		target:			undefined,
		targetFormat:	'{score}',
		targetKeep:		false,
		targetText:		'',
		targetType:		'hint',
		hintList: ['bad', 'poor','average', 'good', 'great'],
		path: 'themes/dtrpg/images/edge/',
		starOn: 'icon_rate_on.png',
		starHalf: 'icon_rate_mid.png',
		starOff: 'icon_rate_off.png',
		width: '87px'
	};

})(jQuery);
</script>        <script type="text/javascript">
        function ajax_record_sales_analytics_event(data) {
            //ajax call to record sales analytics event
            $.ajax({
                type: "POST",
                url: '/includes/ajax/analytics.php',
                data: data,
            });
        }

        addLoadEvent(function () {
			$('div#header').css('height','160px');
$('.main-col').css('bottom','0px');
            //Remove the outdated transparent image dividers from left column
            if ($('div#leftcolwrapper>table>tbody>tr>td>table.infoBox>tbody>tr>td>table.standardText.standardContent>tbody>tr>td>img')) {
                $('div#leftcolwrapper>table>tbody>tr>td>table.infoBox>tbody>tr>td>table.standardText.standardContent>tbody>tr>td>img').remove();
            }

            // initialize scrollable (also purchased slideshow)
            $(".scrollable").scrollable({keyboard: true, mousewheel: false});

            var api_scrollable = $('#scrollable').data('scrollable');
            $('#scrollable-next').click(function () {
                api_scrollable.move(3);
            });
            $('#scrollable-prev').click(function () {
                api_scrollable.move(-3);
            });

            // initialize text oveflow (...) capable elements
            /*
			ABOUT TEXT OVERFLOW ELEMENTS

			text overflow elements must declare the following on their CSS class:
				width:???px; //any given width, will be the maximun width to display text
				overflow: hidden;
				white-space: nowrap;
				text-overflow: ellipsis;
			also, they class should be used as handle for jQuery to catch the elements, e.g.: .nav-counter-text
			*/
            $('.nav-counter-text a').textOverflow();
            $('.also-purchased-title a').textOverflow();

            // form and buttons. There must be given a proper submit action and parameters.
            /*$('#cart_quantity').submit(function() {
			  alert('Drivethru form submitted.');
			  return false;
			});*/
            var freeProductAction = "location.replace('https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series?amp%3Baffiliate_id=238470&action=buy_now')";

            $('#checkoutbutton').click(function () {
                $('#cart_quantity').submit();
            });

            $('#addtocartbutton').click(function () {
                $('#cart_quantity').submit();
            });
            $('#getitfreebutton').click(function () {
                eval(freeProductAction);
            });
            $('#addtowishbutton').click(function () {
                console.log('adding to wishlist');
                var two_step = $('#addtowishbutton-twostep');
                if (two_step.length > 0) { // We have a two-step in play.
                    if (two_step.css("display") == 'none') {
                        two_step.show(); // Show the two step.
                        return; // And STOP here, we want them to click a second time.
                    }
                    // It was visible, we want to click through.
                }
                // It was visible, or we don't have a two-step here. Click through.
                wish = document.createElement("input");
                wish.type = "hidden";
                wish.name = "wishlist_add";
                wish.value = "wishlist";
                $('#cart_quantity').append(wish);
                if ($('input.pwyw-input').length > 0) {
                    console.log('pwyw price: ' + $('input.pwyw-input').val());
                    pwyw = document.createElement("input");
                    pwyw.type = "hidden";
                    pwyw.name = "pwyw_price";
                    pwyw.value = $('input.pwyw-input').val();
                }
                var select = $('#addtowishbutton-twostep .wish-button-select');
                $('#cart_quantity').append(select);

				
                $('#cart_quantity').submit();
            });

            $('#whats-this').click(function () {
                $('html, body').animate({
                    scrollTop: ($('#addon_info').offset().top)
                }, 500);
            });


            $('#addtocartwithaddonbutton').click(function () {
                addon = document.createElement("input");
                addon.type = "hidden";
                addon.name = "addon";
                addon.value = "1";
                $('#cart_quantity').append(addon);
                $('#cart_quantity').submit();
            });

            $('.item-rating').each(function (index) {
                var valueId = "#" + $(this).attr('id') + "-value";
                var value = $(valueId).val();
                $(this).raty({readOnly: true, start: value});
            });

            //price selection & misc
            $('.product-price').click(function () {
                //find radio
                var r = $(this).find('input[type=radio]');
                //reset all arrow classes
                $('.pricetag').removeClass('pricetag bold').addClass('pricetag-off');
                $('.product-price').addClass('product-price-off');
                $(this).parent().parent().find('div[class=product-price-special]').removeClass('product-price-special').addClass('product-price-special-off');
                $(this).parent().parent().find('div[class=product-price-strike]').removeClass('product-price-strike').addClass('product-price-strike-off');

                $(r).attr("checked", "");
                $(this).find('div[class=pricetag-off]').removeClass('pricetag-off bold').addClass('pricetag bold');
                $(this).parent().find('div[class~=product-price-off]').removeClass('product-price-off');
                $(this).parent().find('div[class=product-price-special-off]').removeClass('product-price-special-off').addClass('product-price-special');
                $(this).parent().find('div[class=product-price-strike-off]').removeClass('product-price-strike-off').addClass('product-price-strike');

                if (r.attr('value')) {
                    var callback_array = r.attr('value').split('|');
                    change_selected_option(callback_array[0], callback_array[1].split(","));
                }
                analytics_active = true;

            });
            //this will mark the first item in product price as selected, displaying its information
            $('.product-price').first().click();

            //some CSS fixes that need to be set here
            $('#checkoutbutton').mouseover(function () {
                $('#checkoutbutton span').addClass('site-button-hover');
            });
            $('#checkoutbutton').mouseout(function () {
                $('#checkoutbutton span').removeClass('site-button-hover');
            });
            $('#addtocartbutton').mouseover(function () {
                $('#addtocartbutton span').addClass('site-button-hover');
            });
            $('#addtocartbutton').mouseout(function () {
                $('#addtocartbutton span').removeClass('site-button-hover');
            });
            $('#addtocartwithaddonbutton').mouseover(function () {
                $('#addtocartwithaddonbutton span').addClass('site-button-hover');
            });
            $('#addtocartwithaddonbutton').mouseout(function () {
                $('#addtocartwithaddonbutton span').removeClass('site-button-hover');
            });

        });
    </script>
    <script language="javascript">

        var products_id =90960;
        var products_model = '';

    </script>
	    <script type="text/javascript">
        // Provides pwyw feedback to user.
        $(function(){
            // Bind when ready.
            $('input.pwyw-input').change(function () {
                var this_value = parseFloat($(this).val());
                update_pwyw_feedback(this_value);
            });

            $('input.pwyw-input').keyup(function () {
                var this_value = parseFloat($(this).val());
                update_pwyw_feedback(this_value);
            });
            $('div.product-price-item').click(function () {
                var this_value = parseFloat($('input.pwyw-input').val());
                update_pwyw_feedback(this_value);
            })
            $('input.price-radio').change(function () {
                var this_value = parseFloat($('input.pwyw-input').val());
                update_pwyw_feedback(this_value);
            });
            $('input.price-radio').keyup(function () {
                var this_value = parseFloat($('input.pwyw-input').val());
                update_pwyw_feedback(this_value);
            });

            function update_pwyw_feedback(this_value) {
				                var average = 0;
                var message = '';
                var options = document.getElementsByName('option_selection');
                var selected_value;
                var mfr_cost = 0;
                var average_text = '';
				                if (options.length) {
                    for (var i = 0; i < options.length; i++) {
                        if (options[i].checked) {
                            selected_value = options[i].value.split("|", 1);
                            average = $('div.pwyw_average' + selected_value).attr('pwyw_average');
                            average_text = $('div.pwyw_average' + selected_value).attr('pwyw_average_text');
                            //For multiple products, get the cumulative mfr_cost.
                            if (selected_value[0].indexOf("_") > -1) {
                                selected_value = selected_value[0].split("_");
                                for (var j = 0; j < selected_value.length; j++) {
                                    mfr_cost += parseFloat($('div.pwyw_minimum' + selected_value[j]).attr('pwyw_minimum'));
                                }
                            } else {
                                mfr_cost = $('div.pwyw_minimum' + selected_value).attr('pwyw_minimum');
                            }

                        }
                    }
                } else {
                    average = $('div.pwyw_average').attr('pwyw_average');
                    average_text = $('div.pwyw_average').attr('pwyw_average_text');
                }

                if (!$.isNumeric(this_value)) {
                    message = 'Please enter a numerical value.';
                } else if (mfr_cost > 0 && this_value < mfr_cost) {
                    message = "<span class='errorText' >In order to pay for physical materials, this product has a minimum cost of " + Intl.NumberFormat('en', {
						style: 'currency',
						currency: 'USD',
					}).format(mfr_cost) + " USD</span>";
                } else if (this_value == 0) {
                    message = "Thank you for your interest! If you enjoy this title you can come back and \"buy\" it again to support the publisher.";
                } else if (this_value < average) {
                    message = "Thank you for your support!";
                } else if (this_value == average) {
                    message = "Thank you for your support!";
                } else {
                    message = "Thank you for your support! You're an above-average supporter!";
                }
                $('div.pwyw_average').html(message);
                $('div.pwyw_text').html(average_text)
            }
        });
    </script>

  <script language="javascript">

    function rateit(div_id, product_id, starvalue, customer_id_input, on_acs_results) {

      $('#'+div_id).html('<i class="fa fa-spinner fa-spin"></i>');

      $.ajax({
        type: "POST",
        url: "includes/ajax/rateit.php?action=rate",
        data: {
          div_id: div_id, 
          product_id: product_id,
          starvalue: starvalue,
          customer_id_input: customer_id_input,
          on_acs_results: on_acs_results
        },
        success: function(result) {
          if (result.error == 'false') {
            $('#'+div_id).html('Failed.');
          } else {
            $('#'+div_id).html(result);
         }
        }
      });

    }


    function unrateit(div_id, product_id, customer_id_input, on_acs_results) {

      $('#'+div_id).html('<i class="fa fa-spinner fa-spin"></i>');

      $.ajax({
        type: "POST",
        url: "includes/ajax/rateit.php?action=unrate",
        data: {
          div_id: div_id, 
          product_id: product_id,
          customer_id_input: customer_id_input,
          on_acs_results: on_acs_results
        },
        success: function(result) {
          if (result.error == 'false') {
            $('#'+div_id).html('Failed.');
          } else {
            $('#'+div_id).html(result);
         }
        }
      });

    }

  </script>
</head>

<body>
<!--start form declaration. Action should be set to whatever script handles the submit calls -->
    <div class="standardbg" id="header">
         <div id='header-cart-widget' class=" grid hidden" Array> <a href='https://www.drivethrurpg.com/shopping_cart.php'> <span class="site-button rounded-corners-button site-button-nitems"> <span class="rounded-corners-button-text" style="white-space:nowrap;">Cart</span> <div class='site-button site-button-nitems'> <i class='fa fa-shopping-cart' style='margin: 0 3 0 3; position:relative; top:-3px;'></i> </div> <div id='cart-widget-qty' class='site-button site-button-nitems'> 0</div> </span> </a> </div>        <div class="header-main">
                <a href="https://www.drivethrurpg.com/index.php">
        <img src="https://www.drivethrurpg.com/themes/dtrpg/images/drivethrurpg-logo-halloween-2014_650px.png" alt="Happy Halloween from DTRPG!" border="0" />
    </a>
<div class="site-tag-line">
	The Largest RPG Download Store!</div>
        </div>
        <div id="header-nav">
            <div id="actionswrapper" style="cursor: pointer">
        	<div class="social" style="padding-right: 0px;">
	<!--set hrefs to proper twitter and facebook links -->
	<a href="https://twitter.com/DriveThruRPG" target="_blank" title="Twitter"><img src="https://www.drivethrurpg.com/shared_images/icon_twitter_hea.png"/></a>
	<a href="https://www.facebook.com/DriveThruRPG" target="_blank" title="Facebook"><img src="https://www.drivethrurpg.com/shared_images/icon_facebook_hea.png"/></a>
</div>
            	<div id="actionswrapper" style="cursor: pointer">
											<div id="login-btn-tip" class="social actions-tip">
							<a href="https://www.drivethrurpg.com/login.php" class="create_account_window" onclick="return false;"></a>
						</div>
						<a href="https://www.drivethrurpg.com/login.php" onclick="return false;" class="create_account_window">
							<div id="login-btn" class="actions-first">
								<img src="https://www.drivethrurpg.com/themes/dtrpg/images/edge/icon_user_hea_sec.png"/>
								Log In							</div>
						</a>
						<div class="actions-separator"></div>
																					<div class="actions-separator"></div>
					<a href="https://www.drivethrurpg.com/my_library.php" class="create_account_window" onclick="setRedirect('my_library.php');">
						<div id="library-btn" class="actions">
							My Library						</div>
					</a>
					<div class="actions-separator"></div>
					<a href="https://www.drivethrurpg.com/wishlist.php" class="create_account_window" onclick="setRedirect('wishlist.php');">
						<div id="wishlist-btn" class="actions">
							Wishlists						</div>
					</a>
				</div>
            </div>
        </div>
                <script type="text/javascript">        
			 $(function() { $('#header-cart-widget').hide(); });
 $(function() { $('#login-btn-tip').mouseover(function(){ $(this).addClass('actions-tip-hover'); $('#login-btn').addClass('actions-hover'); }); $('#login-btn-tip').mouseout(function() { $(this).removeClass('actions-tip-hover'); $('#login-btn').removeClass('actions-hover'); }); $('#login-btn-tip').click(function() { location.replace('https://www.drivethrurpg.com/login.php');}); $('#login-btn').mouseover(function(){ $(this).addClass('actions-hover'); $('#login-btn-tip').addClass('actions-tip-hover'); }); $('#login-btn').mouseout(function() { $(this).removeClass('actions-hover'); $('#login-btn-tip').removeClass('actions-tip-hover'); }); $('#library-btn').mouseover(function(){ $(this).addClass('actions-hover'); }); $('#library-btn').mouseout(function() { $(this).removeClass('actions-hover'); }); $('#wishlist-btn').mouseover(function(){ $(this).addClass('actions-hover');}); $('#wishlist-btn').mouseout(function() { $(this).removeClass('actions-hover');}); });
 $(function() { $('a[rel*="/includes/ajax/tooltip_request_handler.php?products_id="]').each(function() { $(this).qtip( { content: { text: '<div style="background: transparent;"><i class="fa fa-spinner fa-pulse" ></i></div>', ajax: { url: $(this).attr('rel'), type: 'GET', data: {}, success: function(data,status) { content = data; this.set('content.text', content); } } }, position: { target: $( this ).children()[0], my: 'bottom left', at: 'top right', adjust: { method: 'flip', x: 5, y: 5 }, viewport: $(window), effect: false }, show: { event: 'mouseover', solo: true }, hide: { event: 'mouseout' }, style: { classes: 'qtip-light qtip-shadow qtip-rounded', tip: { corner: true, offset: 5 } } }) }); });
            if (multipleBgTest()) {
                $('#header').removeClass('standardbg');
                $('#header').addClass('multibg');
            }
        </script>	
    </div>
<div class="login-popup-forms">
<script type="text/javascript">
var show_login_create_popup = true;
var show_login_create_message = '';
$(document).ready(function() {
	$("#create_account").validationEngine('detach');
	$("#create_account").validationEngine('detach');
	$("#create_account").validationEngine('attach', {
		promptPosition: "bottomRight",
		scroll: false,
		binded: false,
		autoHidePrompt: true,
		autoHideDelay: 5000,
		onValidationComplete: function(form, status) {
			if (status == true) {
				$("#createaccountbutton").css('cursor', 'auto' );
				$("#createaccountbutton").val("Please Wait");
				$('#createaccountbutton').unbind('click');
				$('#createaccountbutton').unbind('mouseover');
				$('#createaccountbutton').removeClass('site-button-hover');

				$("#create_account").validationEngine('detach');
			}
			return status;
		}
	});

	$('a.create_account_window').click(function() {
		// Only login a new customer if we started on a shopping cart page.
		var this_location = "" + window.location; // Cast to a string.
		var found = this_location.indexOf('shopping_cart.php');
		// If not found, indexOf() will return a -1.
		if (found == -1) {
			login_new_customer('0');
		} else {
			login_new_customer('1');
		}
		return false;
	});

	$("#create_account_hide_password").click(function() {
		var password = $("#create_account_password");
		var password_hidden = $("#create_account_password_hidden");
		var tabindex = 0;

		if ($(this).get(0).checked) {
			$("#password_hidden-wrapper").show();
			$("#password-wrapper").hide();
			tabindex = parseInt(password.attr('tabindex'));
			password.attr("tabindex", -1);
			password.css("display", "none");
			password_hidden.css("display", "");
			password_hidden.attr("tabindex", tabindex);
			password_hidden.get(0).value = password.get(0).value;
		} else {
			$("#password_hidden-wrapper").hide();
			$("#password-wrapper").show();
			tabindex = parseInt(password_hidden.attr('tabindex'));
			password_hidden.attr("tabindex", -1);
			password_hidden.css("display", "none");
			password.css("display", "");
			password.attr("tabindex", tabindex);
		}
	});

	$("#create_account_password_hidden").keyup(function() {
		$("#create_account_password").get(0).value = $(this).get(0).value;
	});

	// When un-checking the "newsletters" checkbox, show the info
	$("#create_account_default_newsletters").click(function() {
		if (this.checked) {
			$("#create_account_default_newsletters_info").fadeOut(300);
		} else {
			$("#create_account_default_newsletters_info").fadeIn(300);
		}
	});

	// click on the close button or the login mask layer to close the popup
	$('a.close').on('click' ,function(){
		$('#create_account_mask , .create_account_popup').fadeOut(300 , function() {
			$('#create_account_mask').remove();
		});
	});
	$(document.body).on('click', '#create_account_mask' ,function(){
		$('#create_account_mask , .create_account_popup').fadeOut(300 , function() {
			$('#create_account_mask').remove();
		});
	});

	var recaptchaLoginWidget;

	// CSS button for submit
	$('#createaccountbutton').on('click', function(e) {
		if ($('form#create_account').validationEngine('validate')) {
			grecaptcha.execute(recaptchaLoginWidget);
		}
		e.preventDefault();
		return false;
	});

	$('#createaccountbutton').on('mouseover', function() {
		$('#createaccountbutton').addClass('site-button-hover');
	});

	$('#createaccountbutton').on('mouseout', function() {
		$('#createaccountbutton').removeClass('site-button-hover');
	});

	// Bind this keypress function to the inputs
	$("#create_account_firstname,#create_account_lastname,#create_account_email_address,#create_account_password,#create_account_password_hidden").keypress(function (evt) {
		// Determine where our character code is coming from within the event
		var charCode = evt.charCode || evt.keyCode;
		if (charCode  == 13) {
			// Enter key's keycode
			if ($('form#create_account').validationEngine('validate')) {
				grecaptcha.execute(recaptchaLoginWidget);
			}
			evt.preventDefault();
			return false;
		}
	});

	$('#create_account_box .btn-facebook').click(function(e) {
		e.preventDefault();
		var href = $(this).attr('href');
		var newsletter = $('#create_account_default_newsletters').is(':checked');
		$.ajax({
				url: 'https://www.drivethrurpg.com/includes/ajax/create_newsletter_session.php',
				data: {newsletter: newsletter},
				type: 'post'
			}
		).success(function(){
				window.location = href;
			});


	});

	$("#mail_misspelling_suggestions").css("display", "none");
	$('#email_address').on('blur', function() {
		$(this).mailcheck({
			suggested: function(element, suggestion) {
				// callback code

				$("#suggestion_message").html('Did you mean "' + suggestion.full + '"?');
				$("#mail_misspelling_suggestions").slideDown(400);
			},
			empty: function(element) {
				// callback code
				$("#mail_misspelling_suggestions").slideUp(300);
			}
		});
	});
});

function login_new_customer(checkout_after_login) {
	if (typeof checkout_after_login === 'undefined') {
		checkout_value = '0';
	} else if (typeof checkout_after_login === 'string') {
		checkout_value = checkout_after_login;
	} else {
		checkout_value = checkout_after_login.toString();
	}

	if (document.forms["login"].elements["email_address"].value != '') {
		new_email_value = document.forms["login"].elements["email_address"].value;
		document.forms["create_account"].elements["email_address"].value = new_email_value;
	}

	if (document.forms["login"].elements["login_password"].value != '') {
		new_pwd_value = document.forms["login"].elements["login_password"].value;
		document.forms["create_account"].elements["create_account_password_hidden"].value = new_pwd_value;
		document.forms["create_account"].elements["create_account_password"].value = new_pwd_value;
	}

	if (document.getElementById("login_mask") != null) {
		$('#login_mask, .login_popup').fadeOut(300 , function() {
			$('#login_mask').remove();
		});
	}

	var loginBox = "#login_box";
	var createAccountBox = "#create_account_box";

	//Fade in the Popup
	$(createAccountBox).fadeIn(300);
	if (!show_login_create_popup) {
		$(loginBox).hide();
		$('.login-page .login-message').html(show_login_create_message);
	}

	if (show_login_create_popup) {
		// Set the center alignment padding + border see css style
		var popMargTop = ($(createAccountBox).height() + 24) / 2;
		var popMargLeft = ($(createAccountBox).width() + 24) / 2;
		$(createAccountBox).css({
			'margin-left' : -popMargLeft
		});
		// hack for iPad
		if (navigator.userAgent.match(/iPad/i)) {
			$(createAccountBox).css({
				'margin-left' : 0,
				'left' : 0
			});
		}
		// Add the create account mask to body
		$('body').append('<div id="create_account_mask"></div>');
		$('#create_account_mask').fadeIn(300);
	}

	$('#create_account_firstname').focus();
	document.forms["login"].elements["checkout_after_login"].value = checkout_value;
	document.forms["create_account"].elements["checkout_after_login"].value = checkout_value;

	
	return false;
}

// This method is called if email is not available, meaning this account already exists.
// Validation requirement is removed from the name fields, then the form is submitted.
function login_from_new_account_box() {

	new_email_value = document.forms["create_account"].elements["email_address"].value;
	document.forms["login"].elements["email_address"].value = new_email_value;
	new_pwd_value = document.forms["create_account"].elements["create_account_password_hidden"].value;
	if (new_pwd_value == '') {
		new_pwd_value = document.forms["create_account"].elements["create_account_password"].value;
	}
	document.forms["login"].elements["login_password"].value = new_pwd_value;

	$('#from_new_account_popup_text').show();
	if ($('#from_new_account_popup_text').html() == '') {
		$('#from_new_account_popup_text').append('<br /><br />Email already in use. Attempting to log you into existing account.');
	}

	$('#login_error_box').html('Error: Incorrect password.');

	login_returning_customer();

	$('#login').submit();

	return false;
}

/**
 * Queries the server to see if this email is available. The script
 * actually checks to see if the email is in use and then inverts
 * the logic. This is the first of two checks for this, because
 * while this check is synchronous, it doesn't return the
 * alertTextOk message with the proper formatting. So the validation
 * checks this first to prevent the form from being submitted, and
 * then if this passes successfully the form makes an ajax call
 * directly to return the properly formatted alertTextOk message.
 *
 * @param	{jqObject}		field	the field where the validation applies
 * @param	{Array[String]}	rules	validation rules for this field
 * @param	{int}			i		rule index
 * @param	{Map}			options	form options
 * @return an error string if validation failed
 */
function is_email_available(field, rules, i, options) {
    var email_available = null;
    $.ajaxSetup({async: false});
    $.post(
        'https://www.drivethrurpg.com/validate_email.php',
        {
            fieldId: 'email',
            fieldValue: field.val()
        },
        function(data) {
            email_available = (data[1]);
        },
        'json'
    );
    $.ajaxSetup({async: true});

	if (email_available == false) {
		return options.allrules.ajaxIsEmailAvailable.alertText;
	}
}

</script>
<script src="/includes/javascript/mailcheck.min.js"></script>
<script src="https://www.google.com/recaptcha/api.js?onload=renderLoginRecaptcha&render=explicit" async defer ></script>
<script type="text/javascript">

	function onSubmit_createAccount(token) {
		$("#g-recaptcha-token").val(token);
		$("#create_account").validationEngine('detach');
		$("#create_account").submit();
	}

	function renderLoginRecaptcha() {
		recaptchaLoginWidget = grecaptcha.render('login-recaptcha');
	}

</script>
<div id="create_account_box" class="create_account_popup customer-popup">
	<a href="#" class="close"><img src="/shared_images/popup_close_button.png"
								   class="btn_close" title="Close Window" alt="Close"/></a>
	<div id="login-recaptcha"
		 class="g-recaptcha"
		 data-sitekey="6LfuT7IUAAAAAE3SHa5ucwB-p_iUzlHmGyQqLpNn"
		 data-callback="onSubmit_createAccount"
		 data-size="invisible">
	</div>
	<style type="text/css">
		#hide_password-wrapper{
			height:35px;
			vertical-align:middle;
		}
		#mail_misspelling_suggestions {
			margin: -10px 0 10px 0;
			height: 15px;
			padding: 5px;
		}
	</style>
	<div class="popup-header">
		<span class="title">
			New Account			<span class="subtitle boxText">
			(or <a tabindex="8" href="#login_box" class="login_window" onclick="return false;">
			Log In</a>)
						</span>
			<span class="subtitle boxText" id="from_login_popup_text"></span>
		</span>
	</div>
	<div class="popup-content-wrapper">
		<div class="popup-content boxText popup-content-left" >
			<link rel="stylesheet" type="text/css" href="/includes/classes/obs/resources/form/css/form.css" />
<script type="text/javascript" src="/includes/libraries/jQuery/1.11.1-min/plugins/jquery.once.js" charset="UTF-8"></script>
<script type="text/javascript" src="/includes/libraries/jQuery/1.11.1-min/plugins/jquery.form.js" charset="UTF-8"></script>
<script type="text/javascript" src="/includes/classes/obs/resources/form/js/form.js" charset="UTF-8"></script>
<script type="text/javascript" src="/includes/classes/obs/resources/form/js/collapse.js" charset="UTF-8"></script>
<script type="text/javascript"></script>
<form id="create_account" name="create_account" class="form-wrapper form-form form-create_account" action="https://www.drivethrurpg.com/create_account.php" method="POST" accept-charset="UTF-8"  enctype="multipart/form-data"><span><input id="action" name="action" class="form-parent-create_account form-hidden form-action" value="process" type="hidden"  />
<input id="origin" name="origin" class="form-parent-create_account form-hidden form-origin" value="new_customer_popup" type="hidden"  />
<input id="checkout_after_login" name="checkout_after_login" class="form-parent-create_account form-hidden form-checkout_after_login" value="0" type="hidden"  />
<input id="redirect_url" name="redirect_url" class="form-parent-create_account form-hidden form-redirect_url" value="/product_info.php?products_id=90960&amp;amp;amp;affiliate_id=238470" type="hidden"  />
<input id="g-recaptcha-token" name="g-recaptcha-token" class="form-parent-create_account form-hidden form-g-recaptcha-token" value="" type="hidden"  />
<input id="customers_referral" name="customers_referral" class="form-parent-create_account form-hidden form-customers_referral" value="" type="hidden"  />
<fieldset  class="form-parent-create_account form-wrapper form-fieldset form-field-name container-inline form-wrapper form-collapsible" id="field-name" name="field-name" ><div class="fieldset-wrapper"><div id="firstname-wrapper" class="wrapper form-element-wrapper"><input type="text" id="firstname" placeholder="First Name" tabindex="1" class="form-parent-field-name form-element form-text form-firstname boxText validate[required]" title="First Name" name="firstname" value="" size="60"   /></div>
<div id="lastname-wrapper" class="wrapper form-element-wrapper"><input type="text" id="lastname" placeholder="Last Name" tabindex="2" class="form-parent-field-name form-element form-text form-lastname boxText validate[required]" title="Last Name" name="lastname" value="" size="60"   /></div>
</div></fieldset>
<div id="email_address-wrapper" class="wrapper form-element-wrapper"><input type="text" id="email_address" placeholder="Email" tabindex="3" class="form-parent-create_account form-element form-text form-email_address boxText validate[required,custom[email],funcCall[is_email_available]]" title="Email" name="email_address" value="" size="60"   /></div>
				<div id="mail_misspelling_suggestions" class="alert-warning">
					<i class="fa fa-warning"></i>
					<span id="suggestion_message"></span>
				</div>
<fieldset  class="form-parent-create_account form-wrapper form-fieldset form-field-pass-wrapper container-inline form-wrapper form-collapsible" id="field-pass-wrapper" name="field-pass-wrapper" ><div class="fieldset-wrapper"><div id="password_hidden-wrapper" class="wrapper form-element-wrapper"><span class="form-pass-wrapper form-pass-span"><input placeholder="Password" tabindex="-1" class="form-parent-field-pass-wrapper form-element form-password form-password_hidden boxText validate[required,minSize[5]]" title="Password" autcomplete="off" id="create_account_password_hidden" name="password_hidden" value="" type="password"  /></span></div>
<div id="password-wrapper" class="wrapper form-element-wrapper"><input type="text" placeholder="Password" tabindex="4" class="form-parent-field-pass-wrapper form-element form-text form-password boxText validate[required,minSize[5]] pass" title="Password" style="display: none;" autocomplete="off" id="create_account_password" name="password" value="" size="60"   /></div>
<div id="hide_password-wrapper" class="wrapper form-element-wrapper"><input type="checkbox" value=""  tabindex="5" checked="checked" id="create_account_hide_password" name="hide_password" class="form-parent-field-pass-wrapper form-element form-checkbox form-hide_password form-checkbox"  /><label class="label-r" for="create_account_hide_password">Hide my password</label></div><style>#hide_password-wrapper{white-space:nowrap;}</style>
</div></fieldset>
<div id="default_newsletters-wrapper" class="wrapper form-element-wrapper"><input type="checkbox" value=""  tabindex="6" id="create_account_default_newsletters" name="default_newsletters" class="form-parent-create_account form-element form-checkbox form-default_newsletters form-checkbox"  /><label class="label-r" for="create_account_default_newsletters">Get the newsletter</label></div>
				<div id="create_account_default_newsletters_info" class="alert alert-danger warningText">
					<i class="fa fa-warning"></i>
					<span class="warning">Subscribe to get the free product of the week!</br> One-click unsubscribe later if you don't enjoy the newsletter.</span>
				</div>
<input id="field-form-id" name="field-form-id" class="form-parent-create_account form-hidden form-field-form-id" value="create_account" type="hidden"  />
<input id="field-form-time" name="field-form-time" class="form-parent-create_account form-hidden form-field-form-time" value="1634845270" type="hidden"  />
<input id="field-form-token" name="field-form-token" class="form-parent-create_account form-hidden form-field-form-token" value="create_account" type="hidden"  />
</span></form>			<div class="submit_button create-account-button alpha omega last">
				<div id="createaccountbutton-wrapper"  ontouchend="$(this).find('input').click();" onmouseup="$(this).find('input').click();" class="form-button-wrapper form-button-div site-button rounded-corners-button" style=""><input tabindex="7" id="createaccountbutton" class="site-button rounded-corners-button-text" type="submit" value="Create Account" name="clicked_element"   /></div>
			</div>
		</div>
				<div class="popup-content standardText popup-content-right">
			<div class="last social-buttons-wrapper"><a href="https://www.facebook.com/v2.10/dialog/oauth?client_id=181736421874745&state=f947081d66c06a9892b4d3e70a775ebb&response_type=code&sdk=php-sdk-5.6.1&redirect_uri=https%3A%2F%2Fwww.drivethrurpg.com%2Ffacebook%2Ffacebook_sign_up_action.php&scope=email%2Cpublic_profile%2Cuser_friends" class="site-button btn-facebook"><i class="fa fa-2x fa-facebook"></i>Log In with Facebook</a></div>
		</div>
			</div>
</div>
<script type="text/javascript">
var show_login_return_popup = true;
var show_login_return_message = '';
var _login_validated = false;

// Get ready with the rest of the login.
$(document).ready(function() {
	// Hide login error.
	$('#login_failure_warning').hide();
	// Setup the validation engine. Detach b/c repeated readys.
	$("#login").validationEngine('detach');
	$("#login").validationEngine('detach');
	$("#login").validationEngine('attach', {
		promptPosition: "bottomRight", 
		scroll: false,
		binded: false,
		autoHidePrompt: true, 
		autoHideDelay: 15000,
		ajaxFormValidation: true,
		ajaxFormValidationURL: 'https://www.drivethrurpg.com/validate_login_credentials.php',
		ajaxFormValidationMethod: 'post',
		onBeforeAjaxFormValidation: beforeAjaxValidationCallback,
		onAjaxFormComplete: afterAjaxValidationCallback
	});

	// This function is triggered at form submission BUT runs repeatedly.
	// Ajax form validation runs for EVERY value and the final form.
	// So here we limit the # of times we call to validate credits.
	function beforeAjaxValidationCallback(form, options) {
		$('#login_failure_warning').hide();
		$('#login').validationEngine('hideAll');
		if (!_login_validated) {
			// Add that we've called to validate the form here.
			_login_validated = true;
			return true;
		}
		// Prevent another call until returned submit.
		return false;
	}

// Called once the server replies to the ajax form validation request
// This is called multiple times, one for each validation round.
// We do NOT want to validate more than once, or submit more than once.
function afterAjaxValidationCallback(status, form, json, options) {
	// Reset the validation state.
	_login_validated = false;
	// Get the error state from the callback.
	var error_state = json[1];
	if (!error_state) {
		var error_message = json[2];
		if (error_message == 'Locked') {
			$('#login_failure_warning .common-error').show();
			$('#login_failure_warning .special-error').hide();
		}
		else {
			$('#login_failure_warning .special-error').html(error_message);
			$('#login_failure_warning .special-error').show();
		}
		$('#login_failure_warning').show();
		setTimeout(function() { $('#from_new_account_popup_text').fadeOut('slow'); }, 5000);
		setTimeout(function() { $('#from_new_account_popup_text').html(''); }, 7000);
		// Return early to avoid submission.
		return;
	}
	// Unbinds, we're about to submit this form.
	$("#loginbutton").css('cursor', 'auto' );
	$("#loginbutton").val("Please Wait");
	$('#loginbutton').off('click');
	$('#loginbutton').off('mouseover');
	$('#loginbutton').removeClass('site-button-hover');
    form.validationEngine('detach');
    $( "#login" )[0].submit();
}

	// When we click on the facebook link a blur event
	// is called on any input we were previously in.
	// This blur is what kicks off validation and err display.
	// So since we want to focus the user on initial page load,
	// we then need to intercept the blur IIF facebook login clicked.
	// Catching it on .click() still gives a split second of the err showing.
	var clicked_element;
    $(document).mousedown(function(event) {
        clicked_element = $(event.target);
    });
    $(document).mouseup(function(event) {
        clicked_element = null;
    });
	$('#login input').blur(function(blur_event) {
		blur_event.stopPropagation();
		// And try to interrupt the blur before it can cause validation.
		$(clicked_element).parents('#fb_login_button').each(function() {
			// So we hide the error display here before continuing.
			// Why inject a style? Because this occurs before blur completes,
			// the error divs aren't in place yet. Since they're non-existent
			// I can't use jquery to select for them to use .hide().
			// So even if the error is triggered, it's automatically hidden.
			var new_style = '<style>div.formError{display:none;}</style>';
			$('#login').before(new_style);
		});
	});
	// End Facebook login JS for errors.

	$('a.login_window').click(function() {
		// Only login a new customer if we started on a shopping cart page.
		var this_location = "" + window.location; // Cast to a string.
		var found = this_location.indexOf('shopping_cart.php');
		// If not found, indexOf() will return a -1.
		if (found == -1) {
			login_returning_customer('0');
		} else {
			login_returning_customer('1');
		}
		return false;
	});

	// click on the close button or the login mask layer to close the popup
	$('a.close').on('click', function() {
		$('#login_mask , .login_popup').fadeOut(300 , function() {
			$('#login_mask').remove();  
		});
	});
	$(document.body).on('click', '#login_mask' ,function(){
		$('#login_mask , .login_popup').fadeOut(300 , function() {
			$('#login_mask').remove();
		});
	});

	// CSS button for submit
	$('#loginbutton').on('click', function(e) {
		$('#login').submit();
	});

	$('#login').submit(function(e){
		if( $(this).hasClass('form-submitted') ){
			e.preventDefault();
			return;
		}
		$(this).addClass('form-submitted');
	});

	$('#loginbutton').on('mouseover', function() {
		$(this).addClass('site-button-hover');
	});

	$('#loginbutton').on('mouseout', function() {
		$(this).removeClass('site-button-hover');
	});

	// Bind this key-press function to the inputs
	$("#login_email_address,#login_password").keypress(function (evt) {
		// Determine where our character code is coming from within the event
		var charCode = evt.charCode || evt.keyCode;
		if (charCode  == 13) {
			// Enter key keycode
			$('#login').submit();
		}
	});
});

function login_returning_customer(checkout_after_login) {
	if (typeof checkout_after_login === 'undefined') {
		checkout_value = '0';
	} else if (typeof checkout_after_login === 'string') {
		checkout_value = checkout_after_login;
	} else {
		checkout_value = checkout_after_login.toString();
	}

	if (document.getElementById("create_account_mask") != null) {
		$('#create_account_mask, .create_account_popup').fadeOut(300 , function() {
			$('#create_account_mask').remove();
		});
	}

	var loginBox = "#login_box";
	var createAccountBox = "#create_account_box";

	//Fade in the Popup
	$(loginBox).fadeIn(300);
	if (!show_login_return_popup) {
		$(createAccountBox).hide();
		$('.login-page .login-message').html(show_login_return_message);
	}

	if (show_login_return_popup) {
		// Set the center alignment padding + border see css style
		var popMargLeft = ($(loginBox).width() + 24) / 2; 
		$(loginBox).css({ 
			'margin-left' : -popMargLeft
		});
		// hack for iPad
		if (navigator.userAgent.match(/iPad/i)) {
			$(loginBox).css({ 
				'margin-left' : 0,
				'left' : 0
			});
		}
		// Add the login mask to body
		$('body').append('<div id="login_mask"></div>');
		$('#login_mask').fadeIn(300);
	}

	if ($("#login_email_address").val().length > 0) {
		$('#login_password').focus();
	} else {
		$('#login_email_address').focus();
	}

	$('form [name="login"] [name="checkout_after_login"]').val(checkout_value);
	$('form [name="create_account"] [name="checkout_after_login"]').val(checkout_value);

	return false;
}

// This method is called if email validation fails.
// It switches the display from the login box to the new customer box
// while maintaining customer input
function switch_to_new_customer() {

	$('.formError').fadeTo(0, 0);

	new_email_value = document.forms["login"].elements["email_address"].value;
	document.forms["create_account"].elements["email_address"].value = new_email_value;
	new_pwd_value = document.forms["login"].elements["login_password"].value;
	document.forms["create_account"].elements["create_account_password_hidden"].value = new_pwd_value;
	document.forms["create_account"].elements["create_account_password"].value = new_pwd_value;

	if ($('#from_login_popup_text').html() == '') {
		$('#from_login_popup_text').append('<br /><br />We could not find an account with that email. Please enter your name to create a new account.');
	}

	login_new_customer();

	return false;
}

function setRedirect(href_link) {
	$('input[name=redirect_url]').val(href_link);
}

</script>


<div id="login_box" class="login_popup customer-popup">
	<a href="#" class="close"><img src="/shared_images/popup_close_button.png" class="btn_close" title="Close Window" alt="Close" /></a>
	<div class="popup-header">
		<span class="title">
			Log In			<span class="subtitle boxText">
				(<a tabindex="6" href="#create_account_box" class="boxText create_account_window"  onclick="return false;">I am new here</a>)
			</span>
		</span>
		<span class="subtitle boxText" id="from_new_account_popup_text"></span>
	</div>
	<div class="popup-content-wrapper">
		<div class="popup-content standardText popup-content-left">
			<form id="login" name="login" class="form-wrapper form-form form-login" action="https://www.drivethrurpg.com/login.php" method="POST" accept-charset="UTF-8"  enctype="multipart/form-data"><span><input id="action" name="action" class="form-parent-login form-hidden form-action" value="process" type="hidden"  />
<input id="origin" name="origin" class="form-parent-login form-hidden form-origin" value="returning_customer_popup" type="hidden"  />
<input id="checkout_after_login" name="checkout_after_login" class="form-parent-login form-hidden form-checkout_after_login" value="0" type="hidden"  />
<input id="redirect_url" name="redirect_url" class="form-parent-login form-hidden form-redirect_url" value="/product_info.php?products_id=90960&amp;amp;amp;affiliate_id=238470" type="hidden"  />
<div id="email_address-wrapper" class="wrapper form-element-wrapper"><input type="text" id="login_email_address" placeholder="Email" tabindex="1" class="form-parent-login form-element form-text form-email_address boxText validate[required,custom[email],ajax[ajaxIsLoginValid]]" title="Email" name="email_address" value="" size="60"   /></div>
<fieldset  class="form-parent-login form-wrapper form-fieldset form-field-pass-wrapper container-inline form-wrapper form-collapsible" id="field-pass-wrapper" name="field-pass-wrapper" ><div class="fieldset-wrapper"><div id="password-wrapper" class="wrapper form-element-wrapper"><span class="form-pass-wrapper form-pass-span"><input placeholder="Password" tabindex="2" class="form-parent-field-pass-wrapper form-element form-password form-password boxText validate[required,minSize[5]]" title="Password" autocomplete="off" id="login_password" name="password" value="" type="password"  /></span></div><a class="forgot-password boxText" tabindex="7" href="https://www.drivethrurpg.com/password_forgotten.php">Forgot password?</a>
</div></fieldset>
<div id="remember_me-wrapper" class="wrapper form-element-wrapper"><input type="checkbox" value=""  id="login_remember_me" tabindex="3" name="remember_me" class="form-parent-login form-element form-checkbox form-remember_me form-checkbox"  /><label class="label-r" for="login_remember_me">Remember me</label></div>
<input id="field-form-id" name="field-form-id" class="form-parent-login form-hidden form-field-form-id" value="login" type="hidden"  />
<input id="field-form-time" name="field-form-time" class="form-parent-login form-hidden form-field-form-time" value="1634845270" type="hidden"  />
<input id="field-form-token" name="field-form-token" class="form-parent-login form-hidden form-field-form-token" value="login" type="hidden"  />
</span><input type="hidden" name="login_csrf_code" value="R49fGzCp99XQrfRjpHDQsiAI7aRbsJR0"></form>			<div class="submit_button login-button alpha omega last">
				<div id="loginbutton-wrapper"  ontouchend="$(this).find('input').click();" onmouseup="$(this).find('input').click();" class="form-button-wrapper form-button-div site-button rounded-corners-button" style=""><input tabindex="4" style="vertical-align:middle" id="loginbutton" class="site-button rounded-corners-button-text" type="submit" value="Log In" name="clicked_element"   /></div>
			</div>
			<div id="login_failure_warning" style="display: none;">
				<span class="warning" >
					<span class="common-error boxText" id="login_error_box">Error: No match for email address or password.</span><br />
					<span class="special-error boxText"></span><br />
					<a href="https://www.drivethrurpg.com/password_forgotten.php">Password forgotten? Click here.</a>				</span>
							</div>
		</div>
					<div class="popup-content standardText popup-content-right">
				<div class="last social-buttons-wrapper"><a href="https://www.facebook.com/v2.10/dialog/oauth?client_id=181736421874745&state=7d25f84ca0988427db87378389f7d274&response_type=code&sdk=php-sdk-5.6.1&redirect_uri=https%3A%2F%2Fwww.drivethrurpg.com%2Ffacebook%2Ffacebook_sign_up_action.php&scope=email%2Cpublic_profile%2Cuser_friends" class="site-button btn-facebook"><i class="fa fa-2x fa-facebook"></i>Log In with Facebook</a></div>
			</div>
			</div>
</div></div>		<script type="application/javascript" src="/includes/javascript/iscroll/iscroll.js"></script>
		
<script>

	var ajaxQueue = new AjaxQueue();
	var selected_profile = new Array();

	function submit_form(form_name, form_id) {
		if (!form_id || form_id.length === 0 || /^\s*$/.test(form_id)) {
			form_id = form_name;
		}
		// Go to the chek out by default.
		$('#go_to_checkout').val(1);
		// Unless this is a live product.
		if (parseInt($('#cart_live_products').val()) > 0) {
			// set a variable so that the page will not redirect to checkout
			$('#go_to_checkout').val(0);
			$('#' + form_id).attr('action', "checkout_live_profiles.php");
		}
		// And submit.
		$('#' + form_id).submit();
	}


// begin jQuery functions
	(function($) {
		$(document).ready(function() {
		});
	})(jQuery);

// used for jQuery.find() function
	function get_wid_from_pid(pid) {
		find_wid = pid.replace(/\{/g, "\\{");
		find_wid = find_wid.replace(/\}/g, "\\}");
		return find_wid;
	}

// Catches "enter" keypress on quantity fields, updates quantity appropriately
	function catch_quantity_enter(e, pid) {
		var qty = get_qty_from_pid(pid);

		//get current addon settings
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);

		var code = e.keyCode || e.which;
		if (code == 13) {
			submit_cart_changes(pid, qty, 0, addon, addon_type);
			e.preventDefault();
			return false;
		}
	}

// get the quantity value associated with the given pid
	function get_qty_from_pid(pid) {
		var find_wid = get_wid_from_pid(pid);
		var qty_field = jQuery.find("#qty_" + find_wid)[0];
		var qty = 0;
		if (qty_field) {
			qty = parseInt($(qty_field).val());
		}

		return qty;
	}

//	get the pwyw price value associated with the given pid
	function get_pwyw_price_from_pid(pid) {
		var find_wid = get_wid_from_pid(pid);
		var pwyw_price_field = jQuery.find('#pwyw_price_' + find_wid)[0];
		var pwyw_price = 0;
		if (pwyw_price_field) {
			pwyw_price = parseFloat($(pwyw_price_field).val());
		}

		return pwyw_price;
	}


// get the old (previous) quantity value associated with the given pid
	function get_oldqty_from_pid(pid) {
		var find_wid = get_wid_from_pid(pid);
		var qty_field = $("#qty_" + find_wid)[0];
		var oldqty = 1;
		if (qty_field) {
			oldqty = $(qty_field).attr('oldval');
		}

		return oldqty;
	}

// get the addon value associated with the given pid
	function get_addon_from_pid(pid) {
		var find_wid = get_wid_from_pid(pid);
		var addon_field = $("#addon_checkbox_" + find_wid)[0];
		var addon = '0';

		if (addon_field) {

			if ($(addon_field).attr('checked')) {
				addon = '1';
			}

		} else {

			//this section handles the addon/tuckbox radio buttons
			var radio_input_name = "addon_radio_" + find_wid;
			var selected_option = $("input[name='" + radio_input_name + "']:checked").val();

			if (selected_option == 'SD' || selected_option == 'LD') {
				addon = '1';
			}

		}

		return addon;
	}


// get the addon type for line item
	function get_addon_type(pid) {
		var find_wid = get_wid_from_pid(pid);
		var addon_field = $("#addon_checkbox_" + find_wid)[0];

		if (addon_field) {
			var addon_type = $(addon_field).val();
		} else {

			//this section handles the addon/tuckbox radio buttons
			var radio_input_name = "addon_radio_" + find_wid;
			var selected_option = $("input[name='" + radio_input_name + "']:checked").val();

			if (selected_option == 'SD' || selected_option == 'LD') {
				addon_type = selected_option;
			}

		}

		return addon_type;
	}

	// get the tuckbox value associated with the given pid
	function get_tuckbox_from_pid(pid) {
		var find_wid = get_wid_from_pid(pid);
		var tuckbox_field = $("#tuckbox_checkbox_" + find_wid)[0];
		var tuckbox = '0';
		if (tuckbox_field) {

			if ($(tuckbox_field).attr('checked')) {
				tuckbox = '1';
			}

		} else {

			//this section handles the addon/tuckbox radio buttons
			var radio_input_name = "addon_radio_" + find_wid;
			var selected_option = $("input[name='" + radio_input_name + "']:checked").val();

			if (selected_option == 'SD' || selected_option == 'LD') {
				tuckbox = '0';
			} else if (selected_option > 0) {
				tuckbox = '1';
			}

		}

		return tuckbox;
	}

// get the tuckbox size for line item
	function get_tuckbox_size(pid) {
		var find_wid = get_wid_from_pid(pid);
		var tuckbox_field = $("#tuckbox_checkbox_" + find_wid)[0];

		if (tuckbox_field) {
			var tuckbox_type = $(tuckbox_field).val();
		} else {

			//this section handles the addon/tuckbox radio buttons
			var radio_input_name = "addon_radio_" + find_wid;
			var selected_option = $("input[name='" + radio_input_name + "']:checked").val();

			if (selected_option == 'SD' || selected_option == 'LD') {
				tuckbox_type = '0';
			} else if (selected_option > 0) {
				tuckbox_type = selected_option;
			}

		}

		return tuckbox_type;
	}

// User has typed a number in a quantity text box
	function set_quantity_directly(pid) {
		var qty = get_qty_from_pid(pid);

		//get current addon settings
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);
		submit_cart_changes(pid, qty, 0, addon, addon_type);
	}


// User has clicked the "-" icon to decrease the quantity by 1
	function set_quantity_decrease(pid) {
		var find_wid = get_wid_from_pid(pid);
		var qty = get_qty_from_pid(pid);
		var decrease_button = $("#decrease_" + find_wid)[0];
		var button_status = $(decrease_button).attr('disabled');
		qty = qty - 1;

		//get current addon settings
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);

		submit_cart_changes(pid, qty, 0, addon, addon_type);
	}

// User has clicked the "+" icon to increase the quantity by 1
	function set_quantity_increase(pid) {
		var find_wid = get_wid_from_pid(pid);

		var qty;
		qty = get_qty_from_pid(pid, true);

		var increase_button = $("#increase_" + find_wid)[0];
		var button_status = $(increase_button).attr('disabled');
		qty = qty + 1;
		//get current addon settings
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);

		submit_cart_changes(pid, qty, 0, addon, addon_type);
	}

	// User has changed the pwyw price
	function set_pwyw_price(pid) {
		console.log('setting pwyw');

		//get values
		var qty = get_qty_from_pid(pid);
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);
		var pwyw_price = get_pwyw_price_from_pid(pid);
		var wishlist = 0;

		//Show spinner
		var find_wid = get_wid_from_pid(pid);
		var pwyw_price_field = jQuery.find('#pwyw_price_' + find_wid)[0];
		$("#pwyw_loading_"+find_wid).show();

		//submit values
		submit_cart_changes(pid, qty, wishlist, addon, addon_type, pwyw_price);
	}

	// Added by Pablo García (2014-08-01): User has added a new product to cart from product_listing module
	// Updated by Pablo García (2014-08-04): No need for calculate visible qty
	function set_quantity_hidden_increase(pid, qty, callback) {
		submit_cart_hidden_increase(pid, qty, 0, 0, 0, callback);
	}

// User has clicked addon checkbox
// Set addon to value of checkbox
	function set_addon(pid) {
		var qty = get_qty_from_pid(pid);
		var wishlist = 0;
		var new_addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);
		submit_cart_changes(pid, qty, wishlist, new_addon, addon_type);
	}

// User has clicked the "X" icon to remove the item from the cart
	function remove_item_from_cart(pid) {
		var find_wid = get_wid_from_pid(pid);
		var remove_button = $("#remove_" + find_wid)[0];
		var button_status = $(remove_button).attr('disabled');
		var qty = 0;

		//get current addon settings
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);

		submit_cart_changes(pid, qty, 0, addon, addon_type);
	}


// User has clicked the "undo" icon to restore an item previously 
// removed the item from the cart
	function undo_remove_item_from_cart(pid) {
		var qty = get_oldqty_from_pid(pid);
		//ignore wishlist
		var wishlist = 0;

		//restore current addon setting
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);

		submit_cart_changes(pid, qty, 0, addon, addon_type);
	}


// User has clicked the "list" icon to move the item from the cart 
// to the wishlist
	function move_item_to_wishlist(pid) {
		var find_wid = get_wid_from_pid(pid);
		var wishlist_button = $("#wishlist_" + find_wid)[0];
		var button_status = $(wishlist_button).attr('disabled');
		var qty = 0;
		var wishlist = 1;

		//get current addon settings
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);

		submit_cart_changes(pid, qty, wishlist, addon, addon_type);
	}


// User has clicked the "undo" icon to restore an item previously 
// moved from the cart to the wishlist
	function undo_move_item_to_wishlist(pid) {
		var qty = get_oldqty_from_pid(pid);
		var wishlist = -1;

		//restore current addon setting
		var addon = get_addon_from_pid(pid);
		var addon_type = get_addon_type(pid);

		submit_cart_changes(pid, qty, wishlist, addon, addon_type);
	}

	function add_sw_to_tuckbox_flag(flag_selector) {
		$(flag_selector).fadeTo('slow', 0, function () { $(flag_selector).html('<div class="pricetag"> <span>In Tuckbox and Shrink-wrapped</span> </div>');});
	}

	function remove_sw_from_tuckbox_flag(flag_selector) {
		$(flag_selector).fadeTo('slow', 0, function () { $(flag_selector).html('<div class="pricetag"> <span>In Tuckbox</span> </div>');});
	}

// Javascript sets display to "waiting"
// Javascript submits data to php:
// * product ID
// * new quantity of item
// * wishlist action (1 == move to, 0 == ignore, -1 == move from)
// * new addon setting (1 == addon added by customer, 0 == no addon selected for this product)
// * type of addon for this item (PS, LS, SD, LD, TB)
// PHP returns data to javascript:
// * product IDs
// * old quantity of each item
// * new quantity of each item
// * new addon setting of each item
// * line-item subtotal
// * cart subtotal
// * if bulk book price is in effect
// * if bulk card price is in effect
// Javascript updates displayed text on page
	function submit_cart_changes(pid, qty, wishlist, addon, addon_type, pwyw_price) {
		console.log('submitting cart changes');
		var find_wid = get_wid_from_pid(pid);
		console.log(find_wid);
		var wishlist_button = $("#wishlist_" + find_wid)[0];
		var wishlist_working = $("#wishlist_working_" + find_wid)[0];
		var wishlist_undo = $("#wishlist_undo_" + find_wid)[0];
		var wishlist_text = $("#wishlist_text_" + find_wid)[0];
		var remove_button = $("#remove_" + find_wid)[0];
		var remove_working = $("#remove_working_" + find_wid)[0];
		var remove_undo = $("#remove_undo_" + find_wid)[0];
		var remove_text = $("#remove_text_" + find_wid)[0];
		var qty_field = $("#qty_" + find_wid)[0];
		var decrease_button = $("#decrease_" + find_wid)[0];
		var increase_button = $("#increase_" + find_wid)[0];
		var addon_checkbox = $("#addon_checkbox_" + find_wid)[0];
		var current_qty = get_qty_from_pid(pid);
		qty = parseInt(qty);
		// wishlist == 1 == move to wishlist
		// wishlist == 0 == ignore
		// wishlist == -1 == move from wishlist
		if (typeof wishlist === 'undefined') {
			wishlist = 0;
		} else {
			wishlist = parseInt(wishlist);
		}

		//check for high count unproofed print card approval
		if($('#pod_card_sans_proof').val() == 1) {
			 var pod_card_sans_proof = 1;
		} else {
			var pod_card_sans_proof = 0;
		}
		console.log('pod_card_sans_proof: ' + pod_card_sans_proof);

		// addon = new addon checkbox setting
		if (typeof addon === 'undefined') {
			addon = '0';
		}

		// Javascript sets display to "waiting"
		if (qty == 0) {
			if (wishlist == 1) {
				// move to wishlist
				$(wishlist_button).hide();
				$(wishlist_working).show();
				$(remove_button).attr('disabled', 'disabled');
			} else if (current_qty > 0) {
				// remove from cart
				$(remove_button).hide();
				$(remove_working).show();
				$(wishlist_button).attr('disabled', 'disabled');
			}

			$(qty_field).attr('disabled', 'disabled');
			$(decrease_button).attr('disabled', 'disabled');
			$(increase_button).attr('disabled', 'disabled');
			$(addon_checkbox).attr('disabled', 'disabled');
		} else {
			if (wishlist == -1) {
				// undo move to wishlist
				$(wishlist_working).show();
				$(wishlist_undo).hide();
				$(wishlist_text).hide();
			} else if (current_qty == 0) {
				// undo remove from cart
				$(remove_working).show();
				$(remove_undo).hide();
				$(remove_text).hide();
			}
		}

		updateCart = {
			// Javascript submits data to php: 			// * product ID
			// * new quantity of item
			// * wishlist action (1 == move to, 0 == ignore, -1 == move from)
			// * new addon setting (1 == on, 0 == off)
			// * current addon setting, for undos
			// * type of eligible addon
			data: {
				inputs: find_wid,
				code: 'update',
				qty: qty,
				pwyw_price: pwyw_price,
				wishlist: wishlist,
				addon: addon,
				addon_type: addon_type,
				pod_card_sans_proof: pod_card_sans_proof
			},
			cbScs: function(result) {
				var subtotal = $('#subtotal')[0];
				// Javascript updates displayed text on page
				updateCartWidget(result.cartsize);
				updateWishWidget(result.wishsize);
				document.forms["cart_contents"].elements["cart_live_products_count"].value = result.livecount;
				if (result.livecount > 0) {
					document.forms["cart_contents"].elements["cart_live_products"].value = "1";
				} else {
					document.forms["cart_contents"].elements["cart_live_products"].value = "0";
				}

				if (result.cart_bulk_book_cost > 0) {
					document.getElementById('bulk_discount_message').innerHTML = "BULK_PRICE_POD_BOOK";
				} else if (result.cart_contains_high_volume_card > 0) {
					document.getElementById('bulk_discount_message').innerHTML = "BULK_PRICE_POD_CARD";
				} else {
					document.getElementById('bulk_discount_message').innerHTML = "";
				}

				$(subtotal).text(result.stotal);
var loopcount = 1;
				// loop through return.lineitems array
				for (var index in result.lineitems) {

					var lineitem = result.lineitems[index];
					var lwishlist_wrapper = $('#wishlist_wrapper_' + lineitem.wid)[0];
					var lwishlist_button = $('#wishlist_' + lineitem.wid)[0];
					var lwishlist_working = $('#wishlist_working_' + lineitem.wid)[0];
					var lwishlist_undo = $('#wishlist_undo_' + lineitem.wid)[0];
					var lwishlist_text = $('#wishlist_text_' + lineitem.wid)[0];
					var lremove_wrapper = $('#remove_wrapper_' + lineitem.wid)[0];
					var lremove_button = $('#remove_' + lineitem.wid)[0];
					var lremove_working = $('#remove_working_' + lineitem.wid)[0];
					var lremove_undo = $('#remove_undo_' + lineitem.wid)[0];
					var lremove_text = $('#remove_text_' + lineitem.wid)[0];
					var lqty_field = $('#qty_' + lineitem.wid)[0];
					var ldecrease_button = $('#decrease_' + lineitem.wid)[0];
					var lincrease_button = $('#increase_' + lineitem.wid)[0];
					var lutotal = $('#lutotal_' + lineitem.wid)[0];
					var pwyw_input = $('#pwyw_price_'+lineitem.wid)[0];
					var pwyw_loading = $('#pwyw_loading_'+lineitem.wid)[0];
					var pwyw_success = $('#pwyw_success_'+lineitem.wid)[0];
					var pwyw_error = $('#pwyw_error_'+lineitem.wid)[0];
					var ltotal = $('#ltotal_' + lineitem.wid)[0];
					var ltotal_discount = $('#ltotal_discount_' + lineitem.wid)[0];
					var ltotal_next_discount = $('#ltotal_next_discount_' + lineitem.wid)[0];
					var laddon_text = $('#laddon_text_' + lineitem.wid)[0];
					var laddon_qty = $('#laddon_qty_' + lineitem.wid)[0];
					var laddon_price = $('#laddon_price_' + lineitem.wid)[0];
					var laddon_end_text = $('#laddon_end_text_' + lineitem.wid)[0];
					var laddon_flag = $("#laddon_flag_" + lineitem.wid)[0];
					var laddon_flag2 = $("#laddon_flag_" + lineitem.wid)[0];
					var laddon_checkbox = $("#addon_checkbox_" + lineitem.wid)[0];
					var laddon_div = $("#addon_" + lineitem.wid)[0];
					var ltuckbox_size = $('input[name=tuckbox_' + lineitem.wid + ']').val();

					// resolve flag text, visibility, and related options
					if (lineitem.addon_eligible == 'SW') { //resolve shrink-wrap addon flags

						//update addon checkbox text
						$(laddon_text).html(lineitem.addontext + ' (+ ');

						if (lineitem.qty > 0 && lineitem.oldqty > 0) { //item was already in the cart

							if (lineitem.item_is_high_volume_card > 0 || lineitem.allow_low_volume_shrinkwrap_checkbox_display == '1') { //item is high-volume card or close enough that adding shrink-wrap would push it over the threshhold

									$(laddon_div).fadeTo('slow', 1);
									if (lineitem.addon == '1' && lineitem.old_addon == '0') {
										$("#laddon_flag_" + lineitem.wid).fadeTo('slow', 1, add_sw_to_tuckbox_flag(laddon_flag));
									} else if (lineitem.addon == '0' && lineitem.old_addon == '1') {
										$("#laddon_flag_" + lineitem.wid).fadeTo('slow', 1, remove_sw_from_tuckbox_flag(laddon_flag));
									}

							} else { //item is not a high-volume card

									//update addon flag text
									$("#laddon_flag_" + lineitem.wid).fadeTo('slow', 1, remove_sw_from_tuckbox_flag(laddon_flag));

									//fade the addon checkbox option and deselect it
									$(laddon_div).fadeTo('slow', 0);
									$(laddon_checkbox).attr('checked', false);

							}

						} else if (lineitem.qty > 0 && lineitem.oldqty == 0) { //item was just restored to cart

							if (lineitem.addon == '1') {
								$("#laddon_flag_" + lineitem.wid).fadeTo('slow', 1, add_sw_to_tuckbox_flag(laddon_flag));
							} else if (lineitem.addon == '0') {
								$("#laddon_flag_" + lineitem.wid).fadeTo('slow', 1, remove_sw_from_tuckbox_flag(laddon_flag2));
							}

						}

					} else { //resolve all other addon flags

						//update addon text
						if (lineitem.qty == 1) {

							if (lineitem.addon_eligible == 'SD' || lineitem.addon_eligible == 'LD') { //deckboxes
								$(laddon_text).html(lineitem.addontext + ' (+');
								$(laddon_qty).html(' ');
								$(laddon_end_text).html(')');
							} else if (lineitem.addon_eligible == 'LS' || lineitem.addon_eligible == 'PS') { //screens
								if (result.aorm == '1') {
									$(laddon_text).html(lineitem.addontext + ' (+ ');
								} else {
									$(laddon_text).html(lineitem.addontext + '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Total ');
								}
								$(laddon_qty).html(' ');
								$(laddon_end_text).html(')');
							}

						} else if (lineitem.qty > 1) {

							if (lineitem.addon_eligible == 'SD' || lineitem.addon_eligible == 'LD') { //deckboxes

								if (lineitem.qty < 100) { //show on single line if below 100
									$(laddon_text).html(lineitem.addontext + ' (+');
								} else {
									$(laddon_text).html(lineitem.addontext + '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+');
								}
								$(laddon_qty).html(' '+lineitem.qty+' ');
								$(laddon_end_text).html(')');

							} else if (lineitem.addon_eligible == 'LS' || lineitem.addon_eligible == 'PS') { //screens

								if (result.aorm == '1') {
									$(laddon_text).html(lineitem.addontext + ' (+ ');
								} else {
									$(laddon_text).html(lineitem.addontext + '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Total ');
								}
								$(laddon_qty).html(' '+lineitem.qty+' ');
								$(laddon_end_text).html(')');

							}

							if (lineitem.addon == '1' && lineitem.old_addon == '0') {
								$(laddon_flag).fadeTo('slow', 1);
							} else if (lineitem.addon == '0' && lineitem.old_addon == '1') {
								$(laddon_flag).fadeTo('slow', 0);
							}

						}

						if (lineitem.qty == lineitem.oldqty) {

							if (lineitem.addon == '1' && lineitem.old_addon == '0') {
								$(laddon_flag).fadeTo('slow', 1);
							} else if (lineitem.addon == '0' && lineitem.old_addon == '1') {
								$(laddon_flag).fadeTo('slow', 0);
							}

						} else if (lineitem.qty == 0 && lineitem.oldqty > 0) {

							//removed from cart or moved to wishlist
							if (lineitem.addon == '1') {
								$(laddon_flag).fadeTo(0, .2);
							}
							//but hide the addon checkbox if not high-volume
							if (result.cart_high_volume_card_cost == 0) {
								$(laddon_div).hide();
							}

						}

					}

					// update wishlist and remove buttons, and
					// fade row in or out, as appropriate
					if (lineitem.qty == 0) {

						if (lineitem.wishlist == 1) {

							// moved to wishlist
							$(lremove_wrapper).addClass('fade');
							var faded_items = $('#row_' + lineitem.wid + ' div.fade');
							if (lineitem.wisherror) {

								$(faded_items).fadeTo('slow', 1);
								$(lwishlist_working).hide();
								$(lwishlist_button).show();
								$(lqty_field).removeProp('disabled');
								$(laddon_checkbox).removeProp('disabled');
								$(lwishlist_text).html(lineitem.wisherror);
								$(lwishlist_text).show();

							} else {

								$(faded_items).fadeTo(0, .2);

								//rehide addon flag as appropriate (it is inside lwishlist_wrapper div)
								if (lineitem.tuckbox_size == '0') { //for decks without tuckboxes, the addon flag visibility depends on the addon checkbox

									if (lineitem.addon == '1') { //addon was checked, so show the flag faded
										$(laddon_flag).fadeTo(0, .2);
									} else { //addon was not checked, so hide flag entirely
										$(laddon_flag).fadeTo(0, 0);
									}

								} else { //for decks with tuckboxes, the addon flag remains visible

									$(laddon_flag).fadeTo(0, .2);
									//but hide the addon checkbox if not high-volume and still would not be if addon was checked
									if (lineitem.item_is_high_volume_card == '0' || lineitem.allow_low_volume_shrinkwrap_checkbox_display == '0') {
										$(laddon_div).hide();
									}

								}

								$(lwishlist_working).hide();
								$(lwishlist_undo).show();
								$(lwishlist_text).show();

							}

						} else if (lineitem.oldqty > 0 && !lineitem.wisherror) {

							// removed from cart
							$(lwishlist_wrapper).addClass('fade');
							var faded_items = $('#row_' + lineitem.wid + ' div.fade');
							$(faded_items).fadeTo(0, .2);

							//rehide addon flag as appropriate (it is inside lwishlist_wrapper div)
							if (lineitem.tuckbox_size == '0') { //for decks without tuckboxes, the addon flag visibility depends on the addon checkbox

								if (lineitem.addon == '1') { //addon was checked, so show the flag faded
									$(laddon_flag).fadeTo(0, .2);
								} else { //addon was not checked, so hide flag entirely
									$(laddon_flag).fadeTo(0, 0);
								}

							} else { //for decks with tuckboxes, the addon flag remains visible

								$(laddon_flag).fadeTo(0, .2);
								//but hide the addon checkbox if not high-volume and still would not be if addon was checked
								if (lineitem.item_is_high_volume_card == '0' || lineitem.allow_low_volume_shrinkwrap_checkbox_display == '0') {
									$(laddon_div).hide();
								}

							}

							$(lremove_working).hide();
							$(lremove_undo).show();
							$(lremove_text).show();
							$(lwishlist_text).hide();

						}

					} else {

						if (lineitem.wishlist == -1) {

							// undone move to wishlist
							var faded_items = $('#row_' + lineitem.wid + ' div.fade');
							$(lremove_wrapper).removeClass('fade');
							$(faded_items).fadeTo(0, 1);

							$(lwishlist_working).hide();
							$(lwishlist_button).show();
							$(lremove_button).removeAttr('disabled');
							$(lqty_field).removeProp('disabled');
							$(ldecrease_button).removeAttr('disabled');
							$(lincrease_button).removeAttr('disabled');
							$(laddon_checkbox).removeProp('disabled');

							//show addon flag as appropriate (it is inside lwishlist_wrapper div)
							if (lineitem.tuckbox_size == '0') { //for decks without tuckboxes, the addon flag visibility depends on the addon checkbox

								if (lineitem.addon == '1') { //addon was checked, so show the flag faded
									$(laddon_flag).fadeTo(0, 1);
								} else { //addon was not checked, so continue to hide flag entirely
									$(laddon_flag).fadeTo(0, 0);
								}

							} else { //for decks with tuckboxes, the addon is always visible

								//force correct shrink-wrap message if addon = 0
								if (lineitem.addon == '0') {
									$("#laddon_flag_" + lineitem.wid).fadeTo('slow', 1, remove_sw_from_tuckbox_flag(laddon_flag));
								}

								$(laddon_flag).fadeTo(0, 1);
								//but hide the addon checkbox if not high-volume and still would not be if addon was checked
								if (lineitem.item_is_high_volume_card == '0' || lineitem.allow_low_volume_shrinkwrap_checkbox_display == '0') {
									$(laddon_div).hide();
								}


							}

						} else if (lineitem.wishlist == 0 && lineitem.wisherror) {

							//move to wishlist clicked when not logged in
							$(lwishlist_working).hide();
							$(lwishlist_button).show();
							$(lremove_button).removeAttr('disabled');
							$(lqty_field).removeProp('disabled');
							$(ldecrease_button).removeAttr('disabled');
							$(lincrease_button).removeAttr('disabled');
							$(laddon_checkbox).removeProp('disabled');
							if (lineitem.wisherror) {
								$(lwishlist_text).html(lineitem.wisherror);
								$(lwishlist_text).show();
							}

						} else if (lineitem.oldqty == 0) {

							// undone remove from cart
							var faded_items = $('#row_' + lineitem.wid + ' div.fade');
							$(lwishlist_wrapper).removeClass('fade');
							$(faded_items).fadeTo(0, 1);

							//rehide addon flag as appropriate (it is inside lwishlist_wrapper div)
							if (lineitem.tuckbox_size == '0') { //for decks without tuckboxes, the addon flag visibility depends on the addon checkbox

								if (lineitem.addon == '1') { //addon was checked, so show the flag
									$(laddon_flag).fadeTo(0, 1);
								} else { //addon was not checked, so hide flag entirely
									$(laddon_flag).fadeTo(0, 0);
								}

							} else { //for decks with tuckboxes, the addon flag remains visible

								//force correct shrink-wrap message if addon = 0
								if (lineitem.addon == '0') {
									$("#laddon_flag_" + lineitem.wid).fadeTo('slow', 1, remove_sw_from_tuckbox_flag(laddon_flag));
								}

								$(laddon_flag).fadeTo(0, 1);
								//but hide the addon checkbox if not high-volume and still would not be if addon was checked
								if (lineitem.item_is_high_volume_card == '0' || lineitem.allow_low_volume_shrinkwrap_checkbox_display == '0') {
									$(laddon_div).hide();
								}

							}

							$(lremove_working).hide();
							$(lremove_button).show();
							$(lwishlist_button).removeAttr('disabled');
							$(lqty_field).removeProp('disabled');
							$(ldecrease_button).removeAttr('disabled');
							$(lincrease_button).removeAttr('disabled');
							$(laddon_checkbox).removeProp('disabled');

						}

					}

					// store the old quantity into an attribute for later
					if (lineitem.oldqty != lineitem.qty) {
						$(lqty_field).attr('oldval', parseInt(lineitem.oldqty));
					}

					// update addon price
					$(laddon_price).text(lineitem.addontotal);

					// update quantity
					$(lqty_field).val(lineitem.qty);
					// update line-item unit price
					if (pwyw_input) {
						$(lutotal).attr('item_price',parseFloat(/\d*\.?\d+/gm.exec(lineitem.lutotal)));
						var orig_val = parseFloat($(pwyw_input).val());
						$(pwyw_input).val(lineitem.lutotal.substring(1));
						var new_val = parseFloat($(pwyw_input).val());
						if ($(pwyw_loading).is(':visible')) {
							//hide spinner, show checkbox for 1 second, then fade out.
							$(pwyw_loading).hide();
							if (orig_val == new_val) {
								$(pwyw_success).show().delay(1000).fadeOut();
							} else {
								$(pwyw_error).show().delay(1000).fadeOut();
							}
						}
					} else {
						var spaces = '\u00a0\u00a0\u00a0\u00a0';
						var new_lutotal = 'X' + spaces + lineitem.lutotal + spaces + '=';
						$(lutotal).text(new_lutotal);
					}
                    var lutotal_number = parseFloat(/\d*\.?\d+/gm.exec(lineitem.lutotal));
                    if(lutotal_number) {
                        $(lutotal).attr('item_price', lutotal_number);
                    }
					// update line-item subtotal
					$(ltotal).text(lineitem.ltotal);

					// resolve print card discount text
					if (lineitem.item_is_high_volume_card == '1') { // this line item is a print card with high-volume discount applied
						$(ltotal_discount).html(lineitem.high_volume_card_discount_amount_for_display + ' discount<br />(' + lineitem.high_volume_card_discount_percentage + '%)');
					} else {
						$(ltotal_discount).html('');
					}

					// resolve print card next discount level text
					if (lineitem.high_volume_card_next_discount_level > 0) { // this line item is a print card eligible for the next level of high-volume discount
						$(ltotal_next_discount).html('Next high-volume<br />discount level at<br />' + lineitem.high_volume_card_next_discount_level + ' decks');
					} else {
						$(ltotal_next_discount).html('');
					}

                    var ltotal_number = parseFloat(/\d*\.?\d+/gm.exec(lineitem.ltotal));
                    if(ltotal_number) {
                        $(ltotal).attr('item_price', ltotal_number);
                    }

				}
				// Update the checkout form message and buttons.
				if (result.checkout == true) {
					enable_checkout(result.checkout_messages);
				}
				else {
					disable_checkout(result.checkout_messages);
				}

			}
		};
		ajaxQueue.schedule(updateCart);
	}

	function enable_checkout(message) {
		// Set message and div visibility
		$('#card_and_book_message').html(message);

		if (message != '') {
			$('#card_and_book_message').css('display', 'block');
		} else {
			$('#card_and_book_message').css('display', 'none');
		}
		// Show button, enable click.
		$('#cartcheckoutbutton.user-logged-in .site-button').css('cursor', 'pointer').prop('disabled', false);
		$('#cartcheckoutbutton-footer.user-logged-in .site-button').css('cursor', 'pointer').prop('disabled', false);
		$('#cartcheckoutbutton.user-logged-in').click(function() {
			submit_form('cart_contents');
			}).fadeTo(1, 1);
		$('#cartcheckoutbutton-footer.user-logged-in').click(function() {
			submit_form('cart_contents');
			}).fadeTo(1, 1);
	}

	function disable_checkout(message) {
		// Set message.
		$('#card_and_book_message').html(message);

		if (message != '') {
			$('#card_and_book_message').css('display', 'block');
		} else {
			$('#card_and_book_message').css('display', 'none');
		}
		// Show button, disable click.
		$('#cartcheckoutbutton.user-logged-in .site-button').css('cursor', 'auto').prop('disabled', true);
		$('#cartcheckoutbutton-footer.user-logged-in .site-button').css('cursor', 'auto').prop('disabled', true);
		$('#cartcheckoutbutton.user-logged-in').click('').fadeTo(1, 0.4);
		$('#cartcheckoutbutton-footer.user-logged-in').click('').fadeTo(1, 0.4);
	}

	function submit_cart_hidden_increase(pid, qty, wishlist, addon, addon_type, callback) {
		var find_wid = get_wid_from_pid(pid);
		increaseCart = {
			// Javascript submits data to php:
			// * Product ID
			// * Quantity always be increased in +1
			data: {
				inputs: find_wid,
				code: 'increase',
				qty: qty,
				wishlist: wishlist,
				addon: addon,
				addon_type: addon_type
			},
			cbScs: function(result) {
				//if cartsize is undefined or otherwise not a number, set to 1
				// since we presume at least one item has just been added to cart
				if(result.cartsize) {
					if(isNaN(result.cartsize)) {
						result.cartsize = 1;
					}
				} else {
					result.cartsize = 1;
				}
				updateCartWidget(result.cartsize);
				if (typeof callback === "function")
					callback();
			}
		};
		existingConfig = ajaxQueue._config;
		ajaxQueue.init({target:"/includes/ajax/cart_processor.php"});
		ajaxQueue.schedule(increaseCart);
		ajaxQueue.init(existingConfig);	}

</script>	
<script>
	var iScrollers = {};
	var lazySliders = {};

	var lazySliderBox = function(opts){
		var elem_id = opts.elem_id,
			old_api_compatibility = opts.old_api_compatibility,
			$elem = $('#' + elem_id),
			view_type = opts.view_type,
			hide_if_empty = opts.hide_if_empty ? opts.hide_if_empty:false ,
			old_api_view_type,
			$content,
			item_size = 142,
			force_recache=false;

		//url could already have params
		var split_url = opts.api_url.split('?');
		var params = split_url[1] || '';

		if (location.search.indexOf('force_recache=1') !== -1) {
			console.log('force_recache ON');
			force_recache = true;
		}

		//TODO: This can be adapted after migratting to the new lazySliderBox
		if (old_api_compatibility){
			var api_url = split_url[0];
		} else {
			var api_url = (split_url[0].slice(-1) != '/')?split_url[0] + '/':split_url[0];
		}

		var init_options = {};
		if (params != ''){
			var split_params = params.split('&');
			for(var i in split_params){
				var param_name = split_params[i].split('=')[0];
				var param_value = split_params[i].split('=')[1];
				init_options[param_name] = param_value;

				//Old api compat:
				if(old_api_compatibility && param_name === 'view_strip'){
					old_api_view_type = param_value;
				}
			}
		};

		//Private methods:
		var addClickEvent = function(){
			var iScrollerIndex = $(this).closest('.strip_content').attr("id");
			var iScroller = iScrollers[iScrollerIndex];

			$(this).unbind('click');
			if (!iScroller.busy){
				$(this).hide();
				$(this).parent().find(".owl-next-spinner").show();
				iScroller.busy = true;
				iScroller.loading = false;
				// Supress hard bounces
				var distance = $(iScroller.wrapper).find(".scroller").width() - Math.abs(iScroller.x);
				var wrapperWidth = $(iScroller.wrapper).innerWidth();
				var numItemsWrapper = Math.floor(wrapperWidth / item_size);
				var anchoItemsWrapper = numItemsWrapper * item_size;

				if ((distance - anchoItemsWrapper) < anchoItemsWrapper) {
					iScroller.scrollTo(iScroller.x - (distance - anchoItemsWrapper), 0, 500, IScroll.utils.ease.quadratic);
				} else {
					iScroller.scrollTo(iScroller.x - anchoItemsWrapper, 0, 500, IScroll.utils.ease.quadratic);
				}
				return false;
			}
		}

		var initToolTips = function(){
			$content.find('a[rel*="includes/ajax/tooltip_request_handler.php?products_id="]').each(function () {
				$(this).qtip({
					content: {
						text: '<div style="background: transparent;"><i class="fa fa-spinner fa-pulse" ></i></div>',
						ajax: {
							url: $(this).attr('rel') + '&view_strip=' + view_type,
							type: 'GET',
							data: {},
							success: function (data) {
								content = data;
								this.set('content.text', content);
							}
						}
					},
					position: {
						target: $(this).children()[0],
						my: 'bottom left',
						at: 'top right',
						adjust: {
							method: 'flip',
							x: 5,
							y: 5
						},
						viewport: $(window),
						effect: false
					},
					show: {
						event: 'mouseover',
						solo: true
					},
					hide: {
						event: 'mouseout'
					},
					style: {
						classes: 'qtip-light qtip-shadow qtip-rounded',
						tip: {
							corner: true,
							offset: 5
						}
					}
				})
			});
		};

		var initSliderIScroller = function(){
			var id_index = $elem.attr('id');
			iScrollers[id_index] = new IScroll("#" + $elem.find('.owl-carousel').attr('id'), {
				scrollX: true,
				scrollY: false,
				mouseWheel: false,
				desktopCompatibility: true,
				eventPassthrough: true
			});

			iScrollers[id_index].busy = false;
			iScrollers[id_index].loading = false;

			// PG: We'll use here and into event closures
			var _this = iScrollers[id_index];

			// PG: Initial state of the arrow buttons
			if (Math.abs(_this.x) > 0) {
				$(_this.wrapper).find(".owl-prev").show();
			} else {
				$(_this.wrapper).find(".owl-prev").hide();
			}

			if (Math.abs(_this.x) < Math.abs(_this.maxScrollX)) {
				$(_this.wrapper).find(".owl-prev").hide();
			} else {
				$(_this.wrapper).find(".owl-next").hide();
				$(_this.wrapper).find(".owl-next-spinner").show();
				iScrollers[id_index].busy = true;
			}

			$(_this.wrapper).find('.owl-prev').on('click', function() {
				// Supress bounces
				if (Math.abs(_this.x + $(_this.wrapper).width()) > $(_this.wrapper).width()){
					_this.scrollTo(_this.x + $(_this.wrapper).width(), 0, 500, IScroll.utils.ease.quadratic);
				} else {
					_this.scrollTo(0, 0, 500, IScroll.utils.ease.quadratic);
				}
				return false;
			});

			$(_this.wrapper).find('.owl-next').bind('click', addClickEvent);

			//  PG: Is an event from the object, not of the $(wrapper)
			_this.on("scrollEnd", function() {
				if (Math.abs(this.x) > 0) {
					$(this.wrapper).find(".owl-prev").show();
				} else {
					$(this.wrapper).find(".owl-prev").hide();
				}

				if (Math.abs(_this.x) < Math.abs(_this.maxScrollX)) {
					$(this.wrapper).find(".owl-next").show();
					$(this.wrapper).find(".owl-next-spinner").hide();
					iScrollers[id_index].busy = false;
					$(this.wrapper).find(".owl-next").bind('click', addClickEvent);
				} else {
					if(!iScrollers[id_index].loading){
						var el = this.wrapper,
							li,
							_current_iscroll = this;

						// Pablo García (2014-05-20): Item from wich we request
						var item_from = $(el).find('.scroller ul li').length;
						var page_params = {
							index: item_from
						};
						if(old_api_compatibility){
							page_params.item_strip = item_from;
						}

						$(_current_iscroll.wrapper).find(".owl-next").unbind('click').hide();
						$(_current_iscroll.wrapper).find(".owl-next-spinner").show();
						iScrollers[id_index].busy = true;
						iScrollers[id_index].loading = true;

						api_call(page_params, function(new_content){
							if(/\w+/.test(new_content)){
								var $new_content = $(new_content);
								var total_lenght = $new_content.length + $(el).find('.scroller').find('li').length;
								$new_content.each(function(){
									$(el).find('.scroller ul').append($(this));
									_current_iscroll.refresh();
								}).promise().done(function(){
									$(el).find('.scroller').css('width', total_lenght * item_size);
									_current_iscroll.refresh();
									$(_current_iscroll.wrapper).find(".owl-next-spinner").hide();
									$(_current_iscroll.wrapper).find(".owl-next").show();
									iScrollers[id_index].busy = false;
									iScrollers[id_index].loading = false;
									$(_current_iscroll.wrapper).find(".owl-next").bind('click', addClickEvent);
								});

								initToolTips();

								$elem.find('.owl-item').find('h1.smallH1 a').each(function() {
									$(this).ellipsis({
										row: 2
									});
								});
								$elem.find('li.smallText, div.smallText').find('h1.smallH1 a').each(function() {
									$(this).ellipsis({
										row: 2
									});
								});
							} else{
								$(_current_iscroll.wrapper).find(".owl-next").hide();
								$(_current_iscroll.wrapper).find(".owl-next-spinner").hide();
								iScrollers[id_index].busy = false;
								if(iScrollers[id_index].loading) {
									iScrollers[id_index].loading = false;
								}
							}
						});
					}
				}
			});

			$elem.find('.product_price_list_mode').each(function() {
				if ($(this).find('s').length > 0) {
					$(this).parent().find('.product_name_list_mode').css('max-width', '150px');
				}
			});
			$elem.find('a.product_name_list_mode').each(function() {
				var width_price_div = $(this).closest('li').find('.product_price_list_mode').width();
				$(this).css('float', 'right');
				$(this).width(205 - width_price_div);
			});
			$elem.find('.owl-item').find('h1.smallH1 a').each(function() {
				$(this).ellipsis({
					row: 2
				});
			});
			$elem.find('li.smallText, div.smallText').find('h1.smallH1 a').each(function() {
				$(this).ellipsis({
					row: 2
				});
			});
		};

		var api_call = function(opts, callback){
			var page_params = {};
			page_params.products_id = '90960';
			if (force_recache === true) {
				page_params.force_recache = '1';
			}
			var options = jQuery.extend(true, {}, init_options, opts, page_params);

			$.get(api_url + view_type, options, callback);
		};

		//Public methods:

		var object = {};

		object.set_view_type = function(new_view_type){
			if(old_api_compatibility){
				old_api_view_type = new_view_type;
			} else {
				view_type = new_view_type || '';
			}
		};

		object.update = function(opts, callback){
			$elem.css({height: $elem.outerHeight() + 'px'});
			$elem.fadeOut('fast').html('<div class="loader_spinner" style="margin-top: 10px; text-align: center"><img width="150px" src="https://www.drivethrurpg.com/shared_images/ajax-loader.gif"/></div>').fadeIn('fast').animate({height: '200px'});

			api_call(opts, this.load);
		};

		object.adjust_size = function(){
			if(typeof $content != 'undefined') {
				$content.find('div.owl-products-carousel, div.owl-products-carousel-between-columns').each(function () {
					var $elems = $(this).find('ul li');
					var num_elems = $elems.length;
					$(this).find('.scroller').width(num_elems * $elems.eq(0).outerWidth());
					$(this).outerWidth($elem.prevAll('.infoBoxHeading:first').outerWidth() - 5);

					$(this).attr('id', 'iScroll_' + elem_id);
				});
			}
		};

		object.load = function (content) {
			$content = $(content);

			object.adjust_size();
			initToolTips();

			$elem.html($content);
			$elem.css('height', 'auto');

			if (view_type == 'slider_view'
					|| (old_api_compatibility && old_api_view_type == 'slider_view')) {
				initSliderIScroller();
			}

			$numItems = $content[1].getElementsByTagName('li').length;

			if(hide_if_empty && $numItems == 0){
				$elem.parent().hide();
			}

			$elem.find('.loader_spinner').parent().hide();
		};

		return object;
	}

	$(window).resize(function() {
		if(typeof lazySliders != 'undefined') {
			$.when($('.strip_content').hide(0)).then(function(){
				for (var i in lazySliders){
					lazySliders[i].adjust_size();
				}
				$('.strip_content').show();
			});
		}
	});

	$(window).ready(function() {
		// Changelog feature: When user clicks on read more for a long changelog, show it.
		// Hide all other shown chagelogs.
		$('.changelog_row_show').on('click',function(e) {
			e.preventDefault();
			alert('Found the event');
			var id = $(this).attr('id');
			// Hide all larger texts.
			$('.changelog_row_txt_hide').hide();
			// Show the selected large text.
			$('#' + id + '_hide').show();
			// Show the smaller display for all the others.
			$('.changelog_row_txt_show').show();
			// Hide the smaller display for the selected one.
			$('#' + id + '_show').hide();
			return false;
		});
		// Changelog feature: When user clicks to see the changelog, show it.
		$('.changelog_display_show a').on('click',function() {
			var id = $(this).attr('id');
			// Hide the click to show.
			$('.changelog_display_show').hide();
			// Show the log.
			$('.changelog_display_hide').show();
			return false;
		});
		// Changelog feature: When user clicks to hide the changelog, hide it.
		$('.changelog_display_hide a').on('click',function() {
			var id = $(this).attr('id');
			// Hide the click to show.
			$('.changelog_display_show').show();
			// Show the log.
			$('.changelog_display_hide').hide();
			return false;
		});

		$('body').trigger('scroll');
	});

	function QueryStringToJSON(url) {
		var pairs = url.split('&');
		var result = {};
		if (pairs instanceof Array) {
		  $(pairs).each(function(pair) {
			  pair = $(pair).text();
			  pair = pair.split('=');
			  result[pair[0]] = decodeURIComponent(pair[1] || '');
		  });
		}
		if (!checkQuestioStringToJSON(result)) {
			result = QueryStringToJSONAlternative(url)
		}
	  if ("JSON" in window) {
		return JSON.parse(JSON.stringify(result));
	  }
	  return url;
	}

	/*
		José Ignacio 2015-01-16
		In some cases the above function returns {=""}
		This function for now only check that
	 */
	function checkQuestioStringToJSON(object) {
		var object_length = Object.keys(object).length;
		if (object_length == 0) {
			return false;
		} else if (object_length == 1) {
			for(key in object){
				var val = object[key];
				if (key=="" && val=="") {
					return false;
				}
			}
		}

		return true;
	}

	// this is the old function which works fine with several browsers
	function QueryStringToJSONAlternative(url) {
		var pairs = url.split('&');

		var result = {};
		pairs.forEach(function(pair) {
			pair = pair.split('=');
			result[pair[0]] = decodeURIComponent(pair[1] || '');
		});

		return JSON.parse(JSON.stringify(result));
	}

	function switchToMobile(url){
		$.get('/includes/ajax/switch_to_mobile.php',"",function(){
			window.location.href = url;
		});
	}

	var query_string = QueryStringToJSON(window.location.href);

</script>

<script src="/includes/javascript/animated_add_to_cart.js"></script>

<script type="text/javascript">
    function ajax_record_sales_analytics_event(data) {
        //ajax call to record sales analytics event
        $.ajax({
            type:"POST",
            url: '/includes/ajax/analytics.php',
            data: data,
        });
    }

    $(function() {
        // Catch clicks on products from inside a titlestrip.
        $('body').on('click', '.titlestrip_link', function(e) {
            let event_tag = 'view-product-from-titlestrip';
            let src = $(this).attr('href').substring($(this).attr('href').indexOf('src=')+4);
            if (src == 'also_purchased' || src == 'cab_col') {
                event_tag = 'view-product-from-alsopurchased';
            }
            ajax_record_sales_analytics_event({
                origin: 'legacy',
                event_tag: event_tag,
                page: '/product_info.php',
            });
        });
    });
</script>

<div class="main-col grid" id="middlesection">
    <div id="maincolwrapper" class="main-col grid bgwhite column">
        <div style="width: 97%; margin: 2px 0px 10px 20px; min-width:580px;" class="grid_12">
			
<div style="display:table;width:100%;">
    <div style="display: table-cell;vertical-align: top;">
        <div id="search_bar_widget">
    <form name="sbf" id="search_bar_form" method="get" action="browse.php">

        <table cellspacing="0" cellpadding="0" width="100%">
            <tr>
                <td width="100%" style="padding: 8px 0px 8px 8px;">
                                            <input name="keywords" id="search_bar" type="input" autocomplete="off" value="" style="font-size: 22px; border-radius: 5px; border: 0px; padding: 5px; color: grey;" placeholder="Search..." onfocus="onfocus_name();">
                                    </td>
                <td style="padding:  8px 8px 4px 0px ">
                    <input type="image" src="https://www.drivethrurpg.com/themes/dtrpg/images/buttons/search_button.png" border="0" alt="Search" onclick="return check_search_form();">                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <div style="float: right; display: inline">
                        <span onclick="$('#search_bar_advanced_controls').slideToggle();" class="actionLink" style="font-weight: 600; padding: 10px;">
                    Advanced Search                        </span>
                    </div>
                    <br style="clear: both" />
                </td>
            </tr>
        </table>
        <div id="search_bar_advanced_controls" style="display: none;">
            <table cellspacing="8" cellpadding="0" width="100%">
                
				<tr> <!-- :KLUDGE: bblackmoor 2010-07-30: This row sets the column widths -->
                    <th class="main search_bar_control_label" align="left">
Author:<br />
<img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/pixel_trans.gif" border="0" alt="" width="100" height="1" >                    </th>
                    <td class="main search_bar_control">
<input type="text" name="author" size="30" /><br />
<img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/pixel_trans.gif" border="0" alt="" width="250" height="1" >                    </td>
                </tr>
                <tr>
                    <th class="main search_bar_control_label" align="left">
                        Artist:                    </th>
                    <td class="main search_bar_control">
<input type="text" name="artist" size="30" />                    </td>
                </tr>
                <tr>
                    <th class="main search_bar_control_label" align="left">
Price:                    </th>
                    <td class="main search_bar_control_label search_bar_control">
$<input type="text" name="pfrom" size="10" />to                        $                        <input type="text" name="pto" size="10" />                    </td>
                </tr>
                                    </table>
            <div id="submit_button_section">
                <span class="actionLink">
<button id="" class="cssBtn" type="submit" onclick="return check_search_form();"><span>Search</span></button>                </span>
            </div>
        </div>
    </form>
    <script type="text/javascript">
        // 2021-08-30 - OZ-2542 - MK
        function ajax_record_sales_analytics_event(data) {
            //ajax call to record sales analytics event
            $.ajax({
                type:"POST",
                url: '/includes/ajax/analytics.php',
                data: data,
            });
        }

        // Because the date fields are initially hidden,
        // the picker can't be constructed until they are showing.
        // Therefore, the picker is attached to the onfocus event.
        function sdate_from_picker() {
            try {
                AnyTime.picker( "sdate_from", { format: "%Y-%m-%d"} );
            } catch (error) {
                // do nothing
            }
        }

        function sdate_to_picker() {
            try {
                AnyTime.picker( "sdate_to", { format: "%Y-%m-%d"} );
            } catch (error) {
                // do nothing
            }
        }

        // Because the time fields are initially hidden,
        // the picker can't be constructed until they are showing.
        // Therefore, the picker is attached to the onfocus event.
        function stime_from_picker() {
            try {
                // for ease of use, using whole hours in search
                AnyTime.picker( "stime_from", { format: "%l:00 %p"} );
            } catch (error) {
                // do nothing
            }
        }

        function stime_to_picker() {
            try {
                // for ease of use, using whole hours in search
                AnyTime.picker( "stime_to", { format: "%l:00 %p"} );
            } catch (error) {
                // do nothing
            }
        }

        function toggle_live_fields() {
            var has_is_live = document.getElementById('is_live');

            if (has_is_live) {
                var state = document.getElementById('is_live').checked;
                if (state) {
                    $('#live_products_section').slideDown('slow');
                } else {
                    $('#live_products_section').slideUp('slow');
                }
            }
        }

        function check_search_form() {
            var error_message = 'Errors have occurred during the process of your form.\n\nPlease make the following corrections:\n\n';
            var error_found = false;
            var error_field;
            var keywords = document.sbf.keywords.value;
            var has_is_live = document.getElementById('is_live');

            var pfrom = document.sbf.pfrom.value;
            var pto = document.sbf.pto.value;
            var author = document.sbf.author.value;
            var pfrom_float;
            var pto_float;

            if (keywords == 'Search...') {
                document.sbf.keywords.value = '';
            }
            if (keywords == 'Search within results... ') {
                document.sbf.keywords.value = '';
            }

            if ((keywords == '' || keywords.length < 1)
                && (pfrom == '' || pfrom.length < 1)
                && (pto == '' || pto.length < 1)
                && (author == '' || author.length < 1)
                && (artist == '' || artist.length < 1)
                && (!has_is_live)) {

                error_message = error_message + '* At least one of the fields in the search form must be entered.\n';
                error_field = document.sbf.keywords;
                error_found = true;
            }

            if (pfrom.length > 0) {
                pfrom_float = parseFloat(pfrom);

                if (isNaN(pfrom_float)) {
                    error_message = error_message + '* Price "from" must be a number.\n';
                    error_field = document.sbf.pfrom;
                    error_found = true;
                }
            } else {
                pfrom_float = 0;
            }

            if (pto.length > 0) {
                pto_float = parseFloat(pto);

                if (isNaN(pto_float)) {
                    error_message = error_message + '* Price "to" must be a number.\n';
                    error_field = document.sbf.pto;
                    error_found = true;
                }
            } else {
                pto_float = 0;
            }

            if (pfrom.length > 0 && pto.length > 0
                && !isNaN(pfrom_float)
                && !isNaN(pto_float)
                && pto_float < pfrom_float) {

                error_message = error_message + '* Price "to" must be greater than or equal to price "from".\n';
                error_field = document.sbf.pto;
                error_found = true;
            }

            if (error_found == true) {
                alert(error_message);
                error_field.focus();
                return false;
            } else {
                return true;
            }
        }

        function focus_on_search_bar() {
            var search_bar_input = document.getElementById('search_bar');
            if (search_bar_input) {
                var value_filter = (search_bar_input.value != '' && search_bar_input.value != ' ');

                if (search_bar_input && search_bar_input.value != 'Search...' && search_bar_input.value != 'Search within results... ' && value_filter) {
                    search_bar_input.value = search_bar_input.value + ' ';
                    search_bar_input.focus();
                }
            }
        }

        var autocomplete;

        function onfocus_name() {
            var search = $('#search_bar');

            if (search.attr('value') == 'Search...') {
                search.css('color','black');
                search.attr('value','');
            }

            if (search.attr('value') == 'Search within results... ') {
                search.css('color','black');
                search.attr('value','');
            }

            var cache = {},lastXhr;
            var options = {
                source: function(request, response) {
                    var term = request.term;
                    if ( term in cache ) {
                        response( cache[ term ] );
                        return;
                    }
                    $.ajax({
                        url: "includes/ajax/search_autocomplete_jquery.php",
                        dataType: "json",
                        data: {
                            term : request.term,
                            filters : (($('#search_filter')) ? $('#search_filter').val() : ''),
                            manufacturers_id : (($('#search_manufacturer')) ? $('#search_manufacturer').val() : ''),
                            cPath : (($('#search_cPath')) ? $('#search_cPath').val() : '')
                        },
                        success: function(data) {
                            cache[ term ] = data;
                            response(data);
                        }
                    });
                },
                delay: 400,
                minLength: 3,
                html: 'html',
                focus: function(event,ui) {
                    $('#search_bar').val(ui.item.name);
                    return false;
                },
                select: function(event,ui) {
                    let event_tag = 'view-product-from-search';
                    ajax_record_sales_analytics_event({
                        origin: 'legacy',
                        event_tag: event_tag,
                        page: '/product_info.php',
                    });

                    $('#search_bar').val(ui.item.name);
                    location.replace(ui.item.link);

                    return false;
                }
            };

            autocomplete = $('#search_bar').autocomplete(options);

            return true;
        }
        toggle_live_fields();//start the fields off toggled
        focus_on_search_bar();//move focus to the search bar

        $('.search_parameter').each(function() {
            $( this ).on('click',function() {
                var lnk = $( this ).children().children().attr('href');
                if (lnk) location.href = lnk;
            })
        });

        if (0) {
            // TODO: bblackmoor 2012-06-13: design a min-search form specifically for live products
            //$('#search_bar_advanced_controls').slideDown();
        }
    </script>
        </div>
    </div>
<!--    begin subheader-->
<!--    end subheader-->
</div>
        </div>
		<form name="cart_quantity" action="https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series?amp%3Baffiliate_id=238470&action=add_product" method="post" id="cart_quantity"><input type="hidden" name="products_id" value="90960">        <div class="grid_11 omega" id="contentcolwrapper" itemscope itemtype="https://schema.org/CreativeWork">
			            <meta itemprop="url" content="https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series"/>
            <meta itemprop="description"
                  content="Sword &amp; Sarcasm: The Complete Series! - The complete Sword &amp;amp; Sarcasm series &amp;mdash; more than 160 full-color pages! Herbert is a mercenary with heart &amp;mdash"/>
            <meta itemprop="image"
                  content="https://www.drivethrurpg.com/images/3628/90960.jpg"/>
            <div class="alpha" id="widget-content">
                <div class="grid_2 alpha" id="prod-preview-wrapper">
                    <div class="grid_3 alpha omega" id="prod-preview-picture"
                         style="height: 216px; width: 140px;">
						                    <a id="prod-preview-picture-1"  href="images/3628/90960.jpg">
                        <img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/3628/90960-thumb140.jpg" border="0" alt="Sword & Sarcasm: The Complete Series!" width="140px" height="216px" id="cover-thumbnail"><img style="bottom: 40px; float: right;" src="shared_images/zoom.png" class="prod-preview-picture-mag-glass">
                    </a>
                                    <script>
                    $(document).ready(function() {
                        $("a#prod-preview-picture-1").fancybox(null);
                        
                    });
                </script>                    </div>
					<div class="prod-preview standardText">                    <a id="quick-pdf-preview"  href="#quick-pdf-preview-box" >
                        <span>Quick Preview</span>
                    </a>
                    <div style="display:none">
                        <div id="quick-pdf-preview-box" class="tip">
                            /gs_flipbook/flip.php?xml=/demo_xml/90960.xml&w=500&h=387
                        </div>
                    </div>
                                    <script>
                    $(document).ready(function() {
                        var bookhref = "/gs_flipbook/flip.php?xml=/demo_xml/90960.xml&w=500&h=387";
                        $('a#quick-pdf-preview').attr('href', bookhref);
                        $('a#quick-pdf-preview').click(function() {
                                 $.fancybox({
                                'width' : 500,
                                'height' : 536,
                                'autoScale' : false,
                                'transitionIn' : 'none',
                                'transitionOut' : 'none',
                                'type' : 'iframe',
                                'href' : $(this).attr('href')

                                });
                                return false;
                        });
                    });
                </script><div class="clear"></div>                    <a id="product-pdf-preview"  href="#product-pdf-preview-box" >
                        <span>Full&#8209;size&nbsp;Preview</span>
                    </a>
                    <div style="display:none">
                        <div id="product-pdf-preview-box" class="tip">
                            https://watermark.drivethrurpg.com/pdf_previews/90960-sample.pdf
                        </div>
                    </div>
                                    <script>
                    $(document).ready(function() {
                        $("a#product-pdf-preview").fancybox({"autoScale":false,"scrolling":"no","centerOnScroll":true,"transitionIn":"none","transitionOut":"none","width":845,"height":705,"href":"https:\/\/watermark.drivethrurpg.com\/pdf_previews\/90960-sample.pdf","type":"iframe","hideOnContentClick":false});
                        
                    });
                </script><div class="clear"></div></div>                </div>
                <div id="prod-info-wrapper" class="grid_10">
                    <div class="grid_12 alpha omega" id="prod_description">
                        <div class="grid_12 product-title">
							<h1><span itemprop="name">Sword &amp; Sarcasm: The Complete Series!</span></h1>                        </div>
                        <div class="grid_12   product-from" itemprop="author" itemscope
                             itemtype="https://schema.org/Person">
														From&nbsp;<h2><a href="https://www.drivethrurpg.com/browse/pub/3628/Faraway-Press">Faraway Press</a></h2>
                            <meta itemprop="name" content="Faraway Press"/>
                            <meta itemprop="url" content="https://www.drivethrurpg.com/browse/pub/3628/Faraway-Press"/>
                        </div>
                    </div>
                    <div class="grid_12 alpha omega" id="prod-information">
						                        <div id="product-buttons-div" class="product-buttons alpha omega">
                            <style>
                                #addtocartwithaddonbutton {
                                display: block;position:relative;top:-5px;background:transparent;                                }
                            </style>
							<div id="addtocartbutton-wrapper"  ontouchend="$(this).find('input').click();" onmouseup="$(this).find('input').click();" class="form-button-wrapper form-button-div site-button rounded-corners-button" style=""><input id="addtocartbutton" class="site-button rounded-corners-button-text" type="submit" value="ADD TO CART" name="clicked_element"   /><div class="site-button-cart"></div></div>
<div class="alpha omega wishlist-buttons"  style="position:relative;z-index:100;">                            <div id="addtowishbutton">
                                <span class="wish-button wish-button-text">ADD&nbsp;TO&nbsp;WISHLIST ></span>
                            </div>
                        </div>
                    </div>
					                    <div id="product-price-wrapper" class="alpha omega">
						                        <!-- BEGIN PRICE CHANGE MOD -->
                        <script language="javascript">
                            var all_option_ids = Array(1);
                            var option_descriptions = Array();

                            var analytics_active = false;

                            /* This function sets hidden inputs id[x] to appropriate values for selection.
							 *
							 * option_array is array in the form of:
							 *  option_0_id, option_0_value, option_1_id, option_1_value
							 * With ID corresponding to products_options.products_options_id and value
							 * corresponding to products_options_values.products_options_values_id
							 */
                            function change_selected_option(selected_id, option_array) {
                                // avoid triggering during init.
                                if (analytics_active) {
                                    ajax_record_sales_analytics_event({
                                        origin: 'legacy',
                                        event_tag: 'select-product-option',
                                        page: '/product_info.php',
                                    });
                                }

                                // Now set hidden inputs appropriately
                                for (var i = 0; i < option_array.length; i = i + 2) {
                                    var el = document.getElementById('id[' + option_array[i] + ']');
                                    if (el) el.value = option_array[i + 1];
                                    //else alert('id['+option_array[i]+'] not found');
                                }
                                // Now set the "long description" appropriately
                                var desc_el = document.getElementById('selected-price-option-desc');
                                if (desc_el) {
                                    var selected_options_arr = String(selected_id).split("_");
                                    $('selected-price-option-desc').fadeOut('slow');
                                    var innerHTML = '<br />';
                                    for (var i = 0; i < selected_options_arr.length; i++) {
                                        if (i > 0) innerHTML += '<br />';
                                        innerHTML += option_descriptions[selected_options_arr[i]];
                                    }
                                    // After fade is done, set innerHTML and fade back in
                                    // Set timeout slightly longer than above just for safety
                                    setTimeout("set_text_and_appear(document.getElementById('selected-price-option-desc'), '" + innerHTML + "')", 210);
                                    // Draw "add with addon" button if option_array contains 41 (print card)
                                    if (option_array.indexOf('41') > -1) {

                                        $('#addwithaddonbr').delay(600).fadeIn('slow');
                                        $('#addtocartwithaddonbutton').delay(600).fadeIn('slow');
                                        $('#whats-this').fadeIn('slow');
                                        $('#product-buttons-div').fadeIn('slow');

                                    } else {

                                        $('#product-buttons-div').fadeOut();
                                        $('#addwithaddonbr').fadeOut('slow');
                                        $('#addtocartwithaddonbutton').fadeOut('slow');
                                        $('#addtocartbuttondiv').delay(600).fadeIn('slow');
                                        $('#whats-this').fadeOut('slow');
                                        $('#product-buttons-div').fadeIn('slow');

                                    }
                                }
                            }

                            function set_text_and_appear(el, innerHTML) {
                                if (el) {
                                    el.innerHTML = innerHTML;
                                    $(el.id).fadeIn('slow');
                                }
                            }
                        </script>
                        <!-- END PRICE CHANGE MOD -->
						                            <script language="javascript">
                                option_descriptions['1'] = 'Watermarked PDF';
                            </script>
						                        <input type="hidden" id="id[1]"
                               name="id[1]"
                               value="1"/>
						                            <div style="display:none;" itemprop="offers" itemscope itemtype="https://schema.org/Offer">
                                <meta itemprop="name" content="Watermarked PDF"/>
                                <meta itemprop="price" content="$4.95"/>
                            </div>
						<div class="product-price-item-solo" style="white-space:nowrap"> <div class="product-price fade" style="margin-bottom: 5px; opacity: 1;"> <div class="pricetag"> <span class="bold">Watermarked PDF</span> </div> </div> <div id="product-price-special" class="product-price-special">$4.95&nbsp;</div><div id="product-price-strike" class="product-price-strike">$24.95</div></div>                        <div class="clear"></div>
                    </div>
					                </div>
            </div>
        </div>
        <div class="alpha omega product-rate-social grid_12">
			                <div class="grid_4 alpha omega product-rate">
                    <div id="product-rate-score" class="grid_2 alpha omega item-rating" itemprop="aggregateRating"
                         itemscope itemtype="https://schema.org/AggregateRating">
                        <input type="hidden" id="product-rate-score-value" value="5"/>
                        <meta itemprop="ratingValue" content="5"/>
                        <meta itemprop="reviewCount" content="1"/>

                    </div>
                    <div style="width: 205px;" class="grid_2 alpha omega">
						                            <a href="https://www.drivethrurpg.com/product_reviews.php?products_id=90960&amp%3Baffiliate_id=238470">
								Average Rating (1 rating)                            </a>
							                    </div>
                </div>
				    <div class="grid_2 product-report">
		    </div>
	        </div>
        <div class="clear"></div>
        <div class="alpha omega prod-content">
			<div class="grid_11 alpha omega prod-content-content"><p><i><b>The complete Sword &amp; Sarcasm series &mdash; more than 160 full-color pages! </b></i>Herbert is a mercenary with heart &mdash; and a curse, forcing him to serve the most annoying person in the world, Duke Benedict! Follow their hilarious misadventures as they meet conniving aristocrats, calculating werewolves, and the slinky cat-girl sorceress, <b>Casmerelda</b>!</p>
<p>This edition collects the complete series from writer <b>John Jackson Miller </b>(author of the Star Wars: Knight Errant comics and novel) and Looney Tunes artist <b>Chuck Fiala</b>. The file also includes a full-color map of the Sword and Sarcasm world!</p>
<p><img style="vertical-align: middle;" alt="Sword and Sarcasm" src="http://www.farawaypress.com/swordandsarcasm/Ads/SSCharacterStrip.jpg" height="122" width="750" /></p>
<p>&nbsp;</p></div>        </div>
        <div class="clear"></div>
		        <div class="clear"></div>
		<img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/pixel_trans.gif" border="0" alt="" width="100%" height="10" >        <div class="clear"></div>

		<img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/pixel_trans.gif" border="0" alt="" width="100%" height="10" >        <div class="clear"></div>

		<div style="width: 100%;;min-height:18px;"  height="14" class="infoBoxHeading" width="100%">&nbsp;
			<div style="float: left">
				&nbsp;Customers Who Bought this Title also Purchased
			</div>
			<div class="slider_switcher" style="float: right; line-height: 0px" elem_id="470bff0"><a href="#" class="switch_view_button" style="outline:0;" name="slider_view">
					<img src="/shared_images/icon_slider_view_off.png"/>
				</a>
				<a href="#" class="switch_view_button" style="outline:0;" name="list_view">
					<img src="/shared_images/icon_list_view_off.png"/>
				</a>
				<a href="#" class="switch_view_button" style="outline:0;" name="grid_view">
					<img src="/shared_images/icon_grid_view_off.png"/>
				</a>&nbsp;
			</div><script>
					$(document).ready(function() {
						$('.slider_switcher[elem_id="470bff0"]').on('click', 'a.switch_view_button', function(e) {
							e.preventDefault();

							var slider_id = $(this).parent().attr('elem_id');
							var view_type = $(this).attr('name');

							$(this).parent().find('img').each(function(){
								var src = $(this).attr('src');
								$(this).attr('src', src.replace('_on.png', '_off.png'));
							});
							var src = $(this).find('img').attr('src');
							$(this).find('img').attr('src', src.replace('_off.png', '_on.png'));

							if(typeof lazySliders !== 'undefined' && typeof lazySliders[slider_id] !== 'undefined'){
								lazySliders[slider_id].set_view_type(view_type);
								lazySliders[slider_id].update({item_from: 0});
							}
						}).find('a.switch_view_button[name="slider_view"]').find('img').each(function(){
							var src = $(this).attr('src');
							$(this).attr('src', src.replace('_off.png', '_on.png'));
						});
					});
				</script></div>
<table id="470bff0" class="infoBox strip_content" style="overflow:hidden;border:none;width:100%;border-spacing:0;" >
                    <tr>
                        <td>
                            <div class="owl-products-carousel owl-carousel" style="height: 200px;">
                                <div class="loader_spinner" style="margin-top: 10px; text-align: center" height="200px"><img width="150px" src="/shared_images/ajax-loader.gif"/></div>
                            </div>
                        </td>
                    </tr>
                </table><script>
				$(document).ready(function() {
					if(typeof lazySliders == 'undefined'){
						lazySliders = [];
					}
					$('#470bff0').appear(function(){
						var opts = {
							elem_id: '470bff0',
							view_type: 'slider_view',
							api_url: '/api/products/list/also_purchased?products_id=90960&variant=1',
							
						};
						lazySliders['470bff0'] = lazySliderBox(opts);
						lazySliders['470bff0'].update();
					});
				});
			</script><img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/pixel_trans.gif" border="0" alt="" width="100%" height="10" >        <div class="clear"></div>
		<img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/pixel_trans.gif" border="0" alt="" width="100%" height="10" >

        <div class="clear"></div>

        <script type="text/javascript" src="includes/g_comments_widget/views/js/g_comments.js"></script>
        <script type="text/javascript" src="includes/g_comments_widget/views/js/time.js"></script>

        <link rel="stylesheet" type="text/css" href="includes/g_comments_widget/views/css/styles.css"/>

		        <div class="tab_widgets grid_12" id="anchor_widgets">
            <div id="ctrl_reviews" class="tab ">Reviews (<span
                        id="n_reviews">0</span>)
            </div>
            <div id="ctrl_comments" class="tab sel">
				Discussions (<span id="n_comments">0</span>)
				            </div>
        </div>
        <div class="clear"></div>
        <!-- Begin Comments Widget -->
        <div id="comments_widget" >
			
<script type="text/javascript"> 

g_id_product = 90960;
g_MAX_COMMENT_SIZE = 10000;
</script>

	<div class="co_no_login">
		Please <a href="https://www.drivethrurpg.com/login.php">log in</a> to add or reply to comments.	
	</div>
<div id="list_comments">
	</div>        </div>
        <!-- End Comments Widget -->

        <!-- Begin Review Widget -->
        <div id="widget-product-reviews"
             class="alpha omega widget-product-reviews" style='display:none'>
            <a name="widget-product-reviews"></a>
            <div class="alpha omega product-reviews grid_12">
				                <div class="alpha omega product-rate">
					                    <!-- product ID: value must be set from server side. -->
					<input type="hidden" name="product-id" value="90960" />                </div>
            </div>
            <div class="alpha omega grid_3">
                <div class="widget-comments-title">
					Reviews                </div>
            </div>
            <div class="clear"></div>
            <div class="alpha omega" id="widget-comments-comments">
				            </div>
            <div class="alpha omega" id="widget-comments-seemore">
                <div style="padding: 5px 0px;">
					<a href="https://www.drivethrurpg.com/product_reviews.php?products_id=90960&amp%3Baffiliate_id=238470">	<span class="site-button rounded-corners-button "> <span class="rounded-corners-button-text" style="white-space:nowrap;">See All Ratings and Reviews</span> </span></a>                </div>
            </div>
        </div>
        <!-- End Review Widget -->
    </div>
	</form></div><!-- main-col -->
<div class="grid column" id="leftcolwrapper">
	<table cellspacing="0" cellpadding="2" border="0"><tr><td class="col_left_content">
 <div class="widget-nav"> <div class="widget-nav-title"> Browse Categories </div> <a href="https://www.drivethrurpg.com/halloween.php?&filters=0_0_0_0_0_45295">            <div class="grid_10 alpha omega widget-nav-item">
                <div id="nav-Halloween Sale" class="widget-nav-item-title">
                    <font color="red"><strong>Halloween Sale</strong></font>
                </div>
            </div>
            <div class="clear"></div></a> <div class="grid_10 alpha omega widget-nav-item"> <div id="nav-rule-system" class="widget-nav-item-title" style=""> Rule System <span id="nav-icon-rule-system" class="widget-nav-item-title-icon" height="15px"></span> </div> <div class="widget-nav-item-content"> <div style="min-width: 145px; display: none;" id="more-hider-f30"><ul class="widget-nav-item-list"> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=44825_0_0_0_0&src=fid44825">Apocalypse World Engine</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=10132_0_0_0_0&src=fid10132">Battletech</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=44826_0_0_0_0&src=fid44826">BRP (Basic Roleplaying)</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=45755_0_0_0_0&src=fid45755">Cyberpunk</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=44838_0_0_0_0&src=fid44838">d100 / d100 Lite</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=44827_0_0_0_0&src=fid44827">Dungeons & Dragons</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=44284_0_0_0_0&src=fid44284">Fate</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=45568_0_0_0_0&src=fid45568">Modiphius 2d20</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=45582_0_0_0_0&src=fid45582">Old-School Revival (OSR)</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=100193_0_0_0_0&src=fid100193">Pathfinder</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=1600_0_0_0_0&src=fid1600">Savage Worlds</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=1700_0_0_0_0&src=fid1700">Shadowrun</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=1800_0_0_0_0&src=fid1800">Storyteller / Storytelling</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=10134_0_0_0_0&src=fid10134">Traveller</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=44835_0_0_0_0&src=fid44835">Warhammer</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=44228_0_0_0_0&src=fid44228"> Any system / system-agnostic</a> </div> <div class="clear"></div> </div> </li> <div class="nav-counter-item"> <input name="systems" id="nav-counter-select-systems" type="input" autocomplete="off" /> </div></div> </div> </div> <div class="clear"></div> <div class="grid_10 alpha omega widget-nav-item"> <div id="nav-product-type" class="widget-nav-item-title" style=""> Product Type <span id="nav-icon-product-type" class="widget-nav-item-title-icon" height="15px"></span> </div> <div class="widget-nav-item-content"> <div style="min-width: 145px; display: none;" id="more-hider-f20"><ul class="widget-nav-item-list"> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_2140_0_0_0&src=fid2140">Core Rulebooks</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_45305_0_0_0&src=fid45305">Bundles</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_2150_0_0_0&src=fid2150">Non-Core Books</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_2200_0_0_0&src=fid2200">Maps & Play Aids</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_2400_0_0_0&src=fid2400">RPG Media & Software</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_44489_0_0_0&src=fid44489">Other Tabletop Games</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_2810_0_0_0&src=fid2810">Gift Certificates</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_2890_0_0_0&src=fid2890">Publisher Resources</a> </div> <div class="clear"></div> </div> </li></div> </div> </div> <div class="clear"></div> <div class="grid_10 alpha omega widget-nav-item"> <div id="nav-genre" class="widget-nav-item-title" style=""> Genre <span id="nav-icon-genre" class="widget-nav-item-title-icon" height="15px"></span> </div> <div class="widget-nav-item-content"> <div style="min-width: 145px; display: none;" id="more-hider-f10"><ul class="widget-nav-item-list"> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_44530_0_0&src=fid44530">Family Gaming</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_100_0_0&src=fid100">Fantasy</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_940_0_0&src=fid940">Historical</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_200_0_0&src=fid200">Horror</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_300_0_0&src=fid300">Modern</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_500_0_0&src=fid500">Science Fiction</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_900_0_0&src=fid900">Miscellaneous</a> </div> <div class="clear"></div> </div> </li></div> </div> </div> <div class="clear"></div> <div class="grid_10 alpha omega widget-nav-item"> <div id="nav-format" class="widget-nav-item-title" style=""> Format <span id="nav-icon-format" class="widget-nav-item-title-icon" height="15px"></span> </div> <div class="widget-nav-item-content"> <div style="min-width: 145px; display: none;" id="more-hider-f44498"><ul class="widget-nav-item-list"> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44499_0&src=fid44499">PDF</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_45831_0&src=fid45831">Phone PDF</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44294_0&src=fid44294">Print</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44501_0&src=fid44501">EPUB</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44502_0&src=fid44502">MOBI</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44503_0&src=fid44503">Audio</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44504_0&src=fid44504">Video</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44505_0&src=fid44505">HTML</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_45317_0&src=fid45317">Virtual Tabletops</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_44593_0&src=fid44593">STL (3D Model)</a> </div> <div class="clear"></div> </div> </li></div> </div> </div> <div class="clear"></div> <div class="grid_10 alpha omega widget-nav-item"> <div id="nav-languages" class="widget-nav-item-title" style=""> Languages <span id="nav-icon-languages" class="widget-nav-item-title-icon" height="15px"></span> </div> <div class="widget-nav-item-content"> <div style="min-width: 145px; display: none;" id="more-hider-f40"><ul class="widget-nav-item-list"> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45208&src=fid45208">English</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_40051&src=fid40051">Deutsch</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_40021&src=fid40021">Español</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_40031&src=fid40031">Français</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_40041&src=fid40041">Italiano</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45908&src=fid45908">Japanese 日本語</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_100092&src=fid100092">Korean 한국어</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45872&src=fid45872">Magyar</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45719&src=fid45719">Nederlands</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45338&src=fid45338">Polski</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_44304&src=fid44304">Português</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45571&src=fid45571">Russian / Русский</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45576&src=fid45576">Suomi</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45337&src=fid45337">Svenska</a> </div> <div class="clear"></div> </div> </li> <li> <div class="nav-counter-item"> <div class="nav-counter-text"> <a href="https://www.drivethrurpg.com/browse.php?filters=0_0_0_0_45757&src=fid45757">Zhongwen 中文</a> </div> <div class="clear"></div> </div> </li></div> </div> </div> <div class="clear"></div> <div class="grid_10 alpha omega widget-nav-item"> <div id="nav-price" class="widget-nav-item-title" style="cursor: auto;"> Price </div> <div class="widget-nav-item-content"> <form action="browse.php" name="filter_prices_form" id="filter_prices_form"><div class="widget_filter_price" style="padding-top: 4px;"><a href='https://www.drivethrurpg.com/browse.php?pwyw=true'>Pay What You Want</a></div><div class="widget_filter_price"><a href='https://www.drivethrurpg.com/browse.php?pto=0&pfrom=0'>Free</a></div><div class="widget_filter_price">$ <input type="text" name="pfrom" style="width: 50px;" class="validate[custom[number]]" /> to $ <input type="text" name="pto" style="width: 50px;" class="validate[custom[number]]" /><span style="vertical-align: middle;"><input type="image" src="https://www.drivethrurpg.com/shared_images/icon_go.png" border="0" alt="Search" title=" Search "></span></div></form> </div> </div> <div class="clear"></div><script type="text/javascript"> $('#nav-rule-system').click(function() { $('#more-hider-f30').slideToggle(); $('#nav-icon-rule-system').toggleClass('widget-nav-item-title-icon-close'); }); 
	$(function() { var options = { ajax : { rq_data : { manufacturers_id : '', filter_index : '0', filters : (($('#search_filter')) ? $('#search_filter').val() : ''), cPath : (($('#search_cPath')) ? $('#search_cPath').val() : ''), keywords : $('#search_bar').val(), price_filters : [] }, url: 'includes/ajax/rules_system_directory.php' }, item_title : 'Rules Systems', placeholder_text : 'Search Systems...' }; $('#nav-counter-select-systems').obs_filteredComboBox(options); });
 $('#nav-product-type').click(function() { $('#more-hider-f20').slideToggle(); $('#nav-icon-product-type').toggleClass('widget-nav-item-title-icon-close'); }); 
 $('#nav-genre').click(function() { $('#more-hider-f10').slideToggle(); $('#nav-icon-genre').toggleClass('widget-nav-item-title-icon-close'); }); 
 $('#nav-format').click(function() { $('#more-hider-f44498').slideToggle(); $('#nav-icon-format').toggleClass('widget-nav-item-title-icon-close'); }); 
 $('#nav-languages').click(function() { $('#more-hider-f40').slideToggle(); $('#nav-icon-languages').toggleClass('widget-nav-item-title-icon-close'); }); 
</script> </div> <div class="clear"></div><!-- top_pub_logos //-->
<table style="position: relative;display: table; width: 100%; table-layout: fixed; margin-top:5px; margin-bottom:5px; border-radius: 5px; overflow: hidden" cellspacing="0px;">
	</table><!-- top_pub_logos_eof //-->
<div style="padding-top: 7px;"><div style="width: 100%;;min-height:18px;"  width="100%" height="14" class="infoBoxHeading">&nbsp;Publisher</div>
<div style="width: 100%;;min-height:18px;"  class="infoBox"><div style="width: 100%;;min-height:18px;"  class="boxText" class="standardText standardContent"><div style="text-align: center; padding: 10px 5px 10px 5px; "><div class="standardText standardContent borderless">
<a href="https://www.drivethrurpg.com/browse/pub/3628/Faraway-Press" target="_blank"><img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/FarawayPresslogo2-140.jpg" border="0" alt="Faraway Press" ></a>
</div>
<div valign="top" class="standardText standardContent hanging-indent borderless">
<a href="https://www.drivethrurpg.com/product_reviews.php?manufacturers_id=3628" title='See All Reviews'> <div style="width: 68px; height: 14px; position: relative; text-indent: 0em; display: inline; text-align: left;" title="5 / 5"> <span style="background: url(https://www.drivethrurpg.com/themes/dtrpg/images/edge/icon_rate_off.png) 0 0 repeat-x; display: inline-block; height: 14px; width: 68px; position: relative;"> <span style="background: url(https://www.drivethrurpg.com/themes/dtrpg/images/edge/icon_rate_on.png) 0 0 repeat-x; display: inline-block; height: 14px; width: 68px; position: relative; bottom: 0px;"> </span> </span> </div></a>
</div>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"><div style='margin-top: 5px' valign="top" class="standardText standardContent borderless">
<a href="https://www.drivethrurpg.com/redirect.php?action=manufacturer&manufacturers_id=3628" target="_blank">Publisher Website&nbsp;<i class="fas fa-external-link-alt"></i></a>
</div>
</div></div>
</div>
</div><div id="fav_box" style="padding-top: 7px;">
<div style="width: 100%;;min-height:18px;"  width="100%" height="14" class="infoBoxHeading">&nbsp;Follow Your Favorites!</div>
<div style="width: 100%;;min-height:18px;"  class="infoBox"><div style="width: 100%;;min-height:18px;"  class="boxText" class="standardText standardContent"><a href="account_newsletters.php"><img class="onestart" src="https://www.drivethrurpg.com/themes/dtrpg/box_products_notifications.gif" border="0" alt="Notifications" align=left></a><a href="https://www.drivethrurpg.com/login.php">Sign in</a> to get custom notifications of new products!<br clear='all' /><div id="fav_gadget"></div></div>
</div>
</div><div style="padding-top: 7px;">
<div style="width: 100%;;min-height:18px;"  height="14" class="infoBoxHeading" width="100%">&nbsp;Recent History</div>
<div style="width: 100%;;min-height:18px;"  class="infoBox"><div style="width: 100%;text-align:center;;min-height:18px;"  class="smallText" width="33%" valign="top" class="standardText standardContent"><a href="https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series" rel="/includes/ajax/tooltip_request_handler.php?products_id=90960"><img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/3628/90960-thumb140.jpg" border="0" alt="Sword &amp; Sarcasm: The Complete Series!" width="80" ></a><br><a href="https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series" rel="/includes/ajax/tooltip_request_handler.php?products_id=90960">Sword &amp;amp; Sarcasm: The Complete Series!</a></div>
</div>
</div>
<div>
	<br /><a target="_blank" href="https://www.drivethrucards.com/index.php?src=sistersite"><img src="https://www.drivethrurpg.com/shared_images/dtcards-logo-245.png" width="245" title="DriveThruCards"></a><br /><br /><a target="_blank" href="https://www.drivethrucomics.com/index.php?src=sistersite"><img src="https://www.drivethrurpg.com/shared_images/dtcomics-logo-245.png" width="245" title="DriveThruComics"></a><br /><br /><a target="_blank" href="https://www.drivethrufiction.com/index.php?src=sistersite"><img src="https://www.drivethrurpg.com/shared_images/dtfiction-logo-245.png" width="245" title="DriveThruFiction"></a><br /><br /><a target="_blank" href="https://www.dmsguild.com/index.php?src=sistersite"><img src="https://www.drivethrurpg.com/shared_images/DMsGuild-logo-245.png" width="245" title="Dungeon Masters Guild"></a><br /><br /><a target="_blank" href="https://www.storytellersvault.com/index.php?src=sistersite"><img src="https://www.drivethrurpg.com/shared_images/stvault-logo-245.png" width="245" title="Storytellers Vault"></a><br /><br /><a target="_blank" href="https://www.wargamevault.com/index.php?src=sistersite"><img src="https://www.drivethrurpg.com/shared_images/wgv-logo-245.png" width="245" title="WarGameVault"></a><br /><br /><a target="_blank" href="https://www.astraltabletop.com/?utm_source=DriveThruRPG&utm_medium=DTRPGHomepage&utm_campaign=DTRPGSite"><img src="https://www.drivethrurpg.com/shared_images/sister-sites-astral.png" width="245" title="Play on Astral Virtual Tabletop for free!"></a><br /><br /><a target="_blank" href="https://www.pathfinderinfinite.com/index.php?src=sistersite"><img src="https://www.drivethrurpg.com/shared_images/pfi-logo-245.png" width="245" title="Pathfinder Infinite"></a></div></td></tr></table></div>
<div class="grid column" id="rightcolwrapper">
	    <script src="/includes/libraries/clipboardjs/clipboard.min.js"></script>
    <script type="text/javascript">
        $(function(){
            clippy = new ClipboardJS('#btn_copy_link');
            clippy.on('success', function (e) {
                console.info('Action:', e.action);
                console.info('Text:', e.text);
                console.info('Trigger:', e.trigger);
                alert("Success! The following was copied to your clipboard: \n\r" + e.text);

                e.clearSelection();
            });

            clippy.on('error', function (e) {
                console.error('Action:', e.action);
                console.error('Trigger:', e.trigger);
                alert("Error copying link to clipboard");
            });
        });
    </script>
	    <script>window.twttr = (function (d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0],
                t = window.twttr || {};
            if (d.getElementById(id)) return t;
            js = d.createElement(s);
            js.id = id;
            js.src = "https://platform.twitter.com/widgets.js";
            fjs.parentNode.insertBefore(js, fjs);

            t._e = [];
            t.ready = function (f) {
                t._e.push(f);
            };

            return t;
        }(document, "script", "twitter-wjs"));</script>
	 <div class="widget-information "> <div class="widget-information-wrapper"> <div id="prod-info-title" class="widget-information-title"> Product Information </div>  <div class="widget-information-item"> <div class="widget-information-item-title"> </div> <div class="widget-information-item-content"> <div style="padding-left: 23px;"><a href="https://www.drivethrurpg.com/metal.php"><img src="https://www.drivethrurpg.com/themes/dtrpg/images/buttons/english/MetalBestSeller-Silver.png" alt="Silver seller" border=0 width="70px"></a></div> </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> Social </div> <div class="widget-information-item-content"> <a href='' onclick='return false;' id='btn_copy_link' class='btn_copy_link' data-clipboard-text='https://www.drivethrurpg.com/product/90960/Sword--Sarcasm-The-Complete-Series'>Copy Link</a><br/><iframe src="https://www.facebook.com/plugins/share_button.php?href=https%3A%2F%2Fwww.drivethrurpg.com%2Fproduct%2F90960%2FSword--Sarcasm-The-Complete-Series&layout=button_count&size=small&mobile_iframe=true&appId=181736421874745&width=88&height=20" width="88" height="20" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true"></iframe><br/><a class="twitter-share-button" href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.drivethrurpg.com%2Fproduct%2F90960%2FSword--Sarcasm-The-Complete-Series">Tweet This</a> </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> Author(s) </div> <div class="widget-information-item-content"> <a href="https://www.drivethrurpg.com/advanced_search_result.php?author=John Jackson Miller">John Jackson Miller</a> </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> Artist(s) </div> <div class="widget-information-item-content"> <a href="https://www.drivethrurpg.com/advanced_search_result.php?artist=Chuck Fiala">Chuck Fiala</a> </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> Pages </div> <div class="widget-information-item-content"> 171 </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> File Size: </div> <div class="widget-information-item-content"> 27.02 MB </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> Format </div> <div class="widget-information-item-content"> Original electronic <a id="format_box" href="#fileformat" > <span><img src="/shared_images/icon_info.png"></span> </a> <div style="display:none"> <div id="fileformat" class="tip"> <table class="svsohelp" width="100%" border="0" cellspacing="5" cellpadding="0"> <tr> <td><b>Scanned image</b></td> </tr> <tr> <td>These products were created by scanning an original printed edition. Most older books are in scanned image format because original digital layout files never existed or were no longer available from the publisher.<br />
<br />
For PDF download editions, each page has been run through Optical Character Recognition (OCR) software to attempt to decipher the printed text. The result of this OCR process is placed invisibly behind the picture of each scanned page, to allow for text searching. However, any text in a given book set on a graphical background or in handwritten fonts would most likely not be picked up by the OCR software, and is therefore not searchable. Also, a few larger books may be resampled to fit into the system, and may not have this searchable text background.<br />
<br />
For printed books, we have performed high-resolution scans of an original hardcopy of the book. We essentially digitally re-master the book. Unfortunately, the resulting quality of these books is not as high. It's the problem of making a copy of a copy. The text is fine for reading, but illustration work starts to run dark, pixellating and/or losing shades of grey. Moir&eacute; patterns may develop in photos. We mark clearly which print titles come from scanned image books so that you can make an informed purchase decision about the quality of what you will receive.</td> </tr> <tr> <td><img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/pixel_trans.gif" border="0" alt="" width="100%" height="10" ></td> </tr> <tr> <td><b>Original electronic format</b></td> </tr> <tr> <td>These ebooks were created from the original electronic layout files, and therefore are fully text searchable. Also, their file size tends to be smaller than scanned image books. Most newer books are in the original electronic format. Both download and print editions of such books should be high quality.</td> </tr> </table> </div> </div> <script> $(document).ready(function() { $("a#format_box").fancybox(null); }); </script> </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> File Information </div> <div class="widget-information-item-content"> Watermarked PDF <a id="drm_box" href="#drm_note" > <span><img src="/shared_images/icon_info.png"></span> </a> <div style="display:none"> <div id="drm_note" class="tip"> <table class="svsohelp" width="100%" border="0" cellspacing="5" cellpadding="0"> <tr> <td><b><u>Watermarked PDF</u></b></td> </tr> <tr> <td><p>These PDF files are digitally watermarked to signify that you are the owner. A small message is added to the bottom of each page of the PDF containing your name and the order number of your purchase.</p> <p><em>Warning</em>: If any files bearing your information are found being distributed illegally, then your account will be suspended and legal action may be taken against you.</p> <p>Here is a sample of a page from a watermarked title: </p> <p><img src="themes/dtrpg/images/Watermark-Sample.jpg" /></p></td> </tr> </table> </div> </div> <script> $(document).ready(function() { $("a#drm_box").fancybox(null); }); </script> </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> File Last Updated: </div> <div class="widget-information-item-content"> April 25, 2011 </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> </div> <div class="widget-information-item-content"> This title was added to our catalog on April 25, 2011. </div> </div> </div> </div> <div class="widget-information widget-information-nopaddingtop"> <div class="widget-information-wrapper-2"> <div class="widget-information-title"> Publisher </div>  <div class="widget-information-item"> <div class="widget-information-item-title"> <a href="https://www.drivethrurpg.com/browse/pub/3628/Faraway-Press" target="_blank"><img class="onestart" src="https://d1vzi28wh99zvq.cloudfront.net/images/FarawayPresslogo2-140.jpg" border="0" alt="Faraway Press" width="100%" style="max-width:127></a> </div> <div class="widget-information-item-content"> Faraway Press </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> Publisher Average Rating </div> <div class="widget-information-item-content"> <div id="publisher-rating" class="item-rating"> <input type="hidden" id="publisher-rating-value" value="5.0"/> </div> <div class="clear"></div ><a href="https://www.drivethrurpg.com/product_reviews.php?manufacturers_id=3628">See All Reviews</a> </div> </div> <div class="widget-information-item"> <div class="widget-information-item-title"> </div> <div class="widget-information-item-content"> <a href=https://www.drivethrurpg.com/redirect.php?action=manufacturer&manufacturers_id=3628 target="_blank">Publisher Website<img src="images/icon_link.png"/></a> </div> </div> </div> </div></div>
</div><!-- middle section -->
<div class="grid" id="footer">
    <div class="grid_6 alpha linkswrapper">
        <div class="grid_3 alpha">
            <div class="widget-links-title">
                Need help?            </div>
            <div class="widget-links-link">
				<a href="https://www.drivethrurpg.com/faq.php" target="_blank">Common Questions (FAQ)</a>            </div>
			<div class="widget-links-link">
				<a href="https://docs.google.com/forms/d/e/1FAIpQLSeWuv5ypRICEVxiOZ8wXda06E354X23IWFYhOc2P8qP7Hf26Q/viewform?usp=pp_url&entry.1569704748=DriveThruRPG.com">Submit Suggestion</a><br>
			</div>
            <div>
				 <div id='contact_us_button' class="cart-buttons" Array> <a href='/contact_us.php'> <span class="site-button rounded-corners-button "> <span class="rounded-corners-button-text" style="white-space:nowrap;">Contact us</span> </span> </a> </div><br /><br /><br />			</div>
	        </div>
        <div class="grid_4">
            <div class="widget-links-title">
                Account            </div>
            <div class="widget-links-link">
				<a href="https://www.drivethrurpg.com/login.php" class="login_window">Login/Create Account</a>
            </div>
            <div class="widget-links-link">
				<a href="https://www.drivethrurpg.com/account.php" class="login_window" onclick="setRedirect('account.php');">Account</a>
            </div>
            <div class="widget-links-link">
                <a href="https://www.drivethrurpg.com/my_library.php" class="login_window" onclick="setRedirect('my_library.php');">My Library</a>
            </div>
            <div class="widget-links-link">
				<a href="https://www.drivethrurpg.com/affiliate_faq.php" class="login_window" onclick="setRedirect('affiliate_faq.php');">Affiliate System</a>
            </div>
							<div class="widget-links-link">
				<a href="https://www.drivethrurpg.com/join.php">How to Sell on DriveThruRPG.com</a>				</div>
				            <div class="widget-links-link">
                <a href="https://www.drivethrurpg.com/index.php?manufacturers_id=432&filters=0_2810_0_0_0">Gift Certificates</a>            </div>
			<div class="widget-links-link"><a href="https://www.drivethrurpg.com/cc/0/default">Create Content for your Favorite Games</a>
            </div>        </div>
        <div class="grid_4 omega links-information">
            <div class="widget-links-title">
                Information            </div>
			<div class="widget-links-link">
						<a href="https://support.drivethrurpg.com/hc/en-us/articles/209937123-About-DriveThruRPG" target="_blank">About Us</a>
					  </div>            <div class="widget-links-link">
                <a href="https://www.drivethrurpg.com/privacy.php">Privacy Policy</a>            </div>

            <div class="widget-links-link">
                <a href="https://www.drivethrurpg.com/newsletter_current.php">Our Latest Newsletter</a>
            </div>            <div class="widget-links-link">
                <a href="https://www.drivethrurpg.com/reviews.php">Product Reviews</a>            </div>
            <div class="widget-links-link">
                <a href="https://www.drivethrurpg.com/rss.php">New Product RSS Feed</a>            </div>
            <div class="widget-links-link">
                <a href="https://www.drivethrurpg.com/newsletter_rss_feed.php">Newsletter RSS Feed</a>            </div>
        </div>
        	</div>
	<div class="grid_4 widget-currency omega">
					<div class="widget-currency-language">
				<select name="language" id="language" class="widget-currency-language-dropdown" onchange="navigateTo(this)">
												<option value="fr"  class="widget-currency-dropdown-option">Français</option>
													<option value="ru"  class="widget-currency-dropdown-option">Russian</option>
													<option value="it"  class="widget-currency-dropdown-option">Italiano</option>
													<option value="en" selected="selected" class="widget-currency-dropdown-option">English</option>
													<option value="de"  class="widget-currency-dropdown-option">Deutsch</option>
													<option value="es"  class="widget-currency-dropdown-option">Español</option>
										</select>
			</div>
					<div class="widget-currency-currency"  style="width: 88px;" >
			<style>#currency_title {width: 95px; }</style>
			<form name="currencies" action="product_info.php" method="get">
				<input type='hidden' name='products_id' value='90960' /><input type='hidden' name='amp%3Baffiliate_id' value='238470' /><input type='hidden' name='site' value='' />				<select name="currency" id="currency" class="widget-currency-currency-dropdown" onchange="this.form.submit();">
											<option value="USD" selected="selected" class="widget-currency-dropdown-option">US &#36;</option>
												<option value="EUR"  class="widget-currency-dropdown-option">&euro;</option>
												<option value="CAD"  class="widget-currency-dropdown-option">Can&#36;</option>
												<option value="GBP"  class="widget-currency-dropdown-option">&#163;</option>
												<option value="JPY"  class="widget-currency-dropdown-option">&#165;</option>
												<option value="AUD"  class="widget-currency-dropdown-option">Au&#36;</option>
												<option value="RUB"  class="widget-currency-dropdown-option">&#1088;&#1091;&#1073;&#1083;&#1100; (&#8381;)</option>
										</select>
				<input type="hidden" name="products_id" value="90960">			</form>
		</div>

	</div>
	<div style="text-align: center; padding-bottom: 8px;" class="grid_12 alpha omega">
		<img src="/shared_images/pmt_methods.png" />
	</div>
</div>
<div class="clear"></div>
<script type="text/javascript">
function destroyMobileVersionBanner () {
    var elem = document.getElementById('classic_version');
    elem.parentNode.removeChild(elem);
    
    document.getElementById('footer').classList.remove('banner');
    document.cookie = 'close_mobile_display=1;path='+obs.config.sitesettings.cookiePath+';domain='+obs.config.sitesettings.cookieDomain;
}

function switchToMobileVersion(e) {
    e.preventDefault();
    document.cookie = 'mobile_display=1;path='+obs.config.sitesettings.cookiePath+';domain='+obs.config.sitesettings.cookieDomain;
    
    var language = '&language=en';
    var url = '/' + language;
    
    var queryStringFragments = document.URL.split('/');
    
    if (queryStringFragments.indexOf('pub') != -1) {
        var publisherId = queryStringFragments[queryStringFragments.length - 2];
        
        url = '/m/browser/publisher/' + publisherId;
    }

    window.location.replace(url);
}

function navigateTo(sel) {
    var language = sel.options[sel.selectedIndex].value;
    
    window.location.href = 'product_info.php?products_id=90960&amp%3Baffiliate_id=238470&site=&manufacturers_id=3628&language='+ language;
    
}
addLoadEvent(function() {
    
    //$('#language').wrap('<form id="languages" name="languages" method="get" action="" />');
    
    //language and currency arrow activation
    try {
        $("#language").msDropDown();
        $("#currency").msDropDown({'visibleRows':8});
    } catch(e) {
        alert(e.message);
    }
});

addLoadEvent(function() {});
</script>
<script type="text/javascript" src="/includes/javascript/suggestion.js" /></script>    <script type="text/javascript">
        // 2021-08-30 - OZ-2542 - MK
        function ajax_record_sales_analytics_event(data) {
            //ajax call to record sales analytics event
            $.ajax({
                type:"POST",
                url: '/includes/ajax/analytics.php',
                data: data,
            });
        }

        // Because the date fields are initially hidden,
        // the picker can't be constructed until they are showing.
        // Therefore, the picker is attached to the onfocus event.
        function sdate_from_picker() {
            try {
                AnyTime.picker( "sdate_from", { format: "%Y-%m-%d"} );
            } catch (error) {
                // do nothing
            }
        }

        function sdate_to_picker() {
            try {
                AnyTime.picker( "sdate_to", { format: "%Y-%m-%d"} );
            } catch (error) {
                // do nothing
            }
        }

        // Because the time fields are initially hidden,
        // the picker can't be constructed until they are showing.
        // Therefore, the picker is attached to the onfocus event.
        function stime_from_picker() {
            try {
                // for ease of use, using whole hours in search
                AnyTime.picker( "stime_from", { format: "%l:00 %p"} );
            } catch (error) {
                // do nothing
            }
        }

        function stime_to_picker() {
            try {
                // for ease of use, using whole hours in search
                AnyTime.picker( "stime_to", { format: "%l:00 %p"} );
            } catch (error) {
                // do nothing
            }
        }

        function toggle_live_fields() {
            var has_is_live = document.getElementById('is_live');

            if (has_is_live) {
                var state = document.getElementById('is_live').checked;
                if (state) {
                    $('#live_products_section').slideDown('slow');
                } else {
                    $('#live_products_section').slideUp('slow');
                }
            }
        }

        function check_search_form() {
            var error_message = 'Errors have occurred during the process of your form.\n\nPlease make the following corrections:\n\n';
            var error_found = false;
            var error_field;
            var keywords = document.sbf.keywords.value;
            var has_is_live = document.getElementById('is_live');

            var pfrom = document.sbf.pfrom.value;
            var pto = document.sbf.pto.value;
            var author = document.sbf.author.value;
            var pfrom_float;
            var pto_float;

            if (keywords == 'Search...') {
                document.sbf.keywords.value = '';
            }
            if (keywords == 'Search within results... ') {
                document.sbf.keywords.value = '';
            }

            if ((keywords == '' || keywords.length < 1)
                && (pfrom == '' || pfrom.length < 1)
                && (pto == '' || pto.length < 1)
                && (author == '' || author.length < 1)
                && (artist == '' || artist.length < 1)
                && (!has_is_live)) {

                error_message = error_message + '* At least one of the fields in the search form must be entered.\n';
                error_field = document.sbf.keywords;
                error_found = true;
            }

            if (pfrom.length > 0) {
                pfrom_float = parseFloat(pfrom);

                if (isNaN(pfrom_float)) {
                    error_message = error_message + '* Price "from" must be a number.\n';
                    error_field = document.sbf.pfrom;
                    error_found = true;
                }
            } else {
                pfrom_float = 0;
            }

            if (pto.length > 0) {
                pto_float = parseFloat(pto);

                if (isNaN(pto_float)) {
                    error_message = error_message + '* Price "to" must be a number.\n';
                    error_field = document.sbf.pto;
                    error_found = true;
                }
            } else {
                pto_float = 0;
            }

            if (pfrom.length > 0 && pto.length > 0
                && !isNaN(pfrom_float)
                && !isNaN(pto_float)
                && pto_float < pfrom_float) {

                error_message = error_message + '* Price "to" must be greater than or equal to price "from".\n';
                error_field = document.sbf.pto;
                error_found = true;
            }

            if (error_found == true) {
                alert(error_message);
                error_field.focus();
                return false;
            } else {
                return true;
            }
        }

        function focus_on_search_bar() {
            var search_bar_input = document.getElementById('search_bar');
            if (search_bar_input) {
                var value_filter = (search_bar_input.value != '' && search_bar_input.value != ' ');

                if (search_bar_input && search_bar_input.value != 'Search...' && search_bar_input.value != 'Search within results... ' && value_filter) {
                    search_bar_input.value = search_bar_input.value + ' ';
                    search_bar_input.focus();
                }
            }
        }

        var autocomplete;

        function onfocus_name() {
            var search = $('#search_bar');

            if (search.attr('value') == 'Search...') {
                search.css('color','black');
                search.attr('value','');
            }

            if (search.attr('value') == 'Search within results... ') {
                search.css('color','black');
                search.attr('value','');
            }

            var cache = {},lastXhr;
            var options = {
                source: function(request, response) {
                    var term = request.term;
                    if ( term in cache ) {
                        response( cache[ term ] );
                        return;
                    }
                    $.ajax({
                        url: "includes/ajax/search_autocomplete_jquery.php",
                        dataType: "json",
                        data: {
                            term : request.term,
                            filters : (($('#search_filter')) ? $('#search_filter').val() : ''),
                            manufacturers_id : (($('#search_manufacturer')) ? $('#search_manufacturer').val() : ''),
                            cPath : (($('#search_cPath')) ? $('#search_cPath').val() : '')
                        },
                        success: function(data) {
                            cache[ term ] = data;
                            response(data);
                        }
                    });
                },
                delay: 400,
                minLength: 3,
                html: 'html',
                focus: function(event,ui) {
                    $('#search_bar').val(ui.item.name);
                    return false;
                },
                select: function(event,ui) {
                    let event_tag = 'view-product-from-search';
                    ajax_record_sales_analytics_event({
                        origin: 'legacy',
                        event_tag: event_tag,
                        page: '/product_info.php',
                    });

                    $('#search_bar').val(ui.item.name);
                    location.replace(ui.item.link);

                    return false;
                }
            };

            autocomplete = $('#search_bar').autocomplete(options);

            return true;
        }
        toggle_live_fields();//start the fields off toggled
        focus_on_search_bar();//move focus to the search bar

        $('.search_parameter').each(function() {
            $( this ).on('click',function() {
                var lnk = $( this ).children().children().attr('href');
                if (lnk) location.href = lnk;
            })
        });

        if (0) {
            // TODO: bblackmoor 2012-06-13: design a min-search form specifically for live products
            //$('#search_bar_advanced_controls').slideDown();
        }
    </script>
﻿<script type="text/javascript">
    obs.config = {
            sitesettings: {
                cookieDomain: "drivethrurpg.com",
                cookiePath: "\/"            },
            suggestions: {
                default: "How Can We Improve?",
                contactMe: "Can we respond to you about this?",
                submit: "Submit Suggestion",
                thanksNoHTML: "Thanks for helping us improve! Please note we check this suggestion box once a week.  If you need help with an order, use the Contact Us page.",
                submit: "Submit Suggestion",
                enterEmail: "Please enter an email address if you want us to contact you.",
                enterSomething: "Please enter a suggestion before clicking Submit."            },
            text: {
                optional: "(optional)",
                simpleRequired: "required"            }
    }
</script>	<script type="text/javascript">
		var _gaq = _gaq || [];
		_gaq.push(['_setAccount', 'UA-697710-1']);
		_gaq.push(['_trackPageview']);
		(function () {
			var ga = document.createElement('script');
			ga.type = 'text/javascript';
			ga.async = true;
			ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
			var s = document.getElementsByTagName('script')[0];
			s.parentNode.insertBefore(ga, s);
		})();
	</script>
<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam-cell.nr-data.net","licenseKey":"NRBR-a792f2982fda854fffd","applicationID":"205576411","transactionName":"ZgcGZEZWW0FSARJbVl9NMUJdGEVAXAYTUU1uCwpWWxlFWkM=","queueTime":0,"applicationTime":567,"atts":"SkAFEg5MSE8=","errorBeacon":"bam-cell.nr-data.net","agent":""}</script></body>
</html>
