<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DeanP.net</title>
	<atom:link href="http://deanp.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://deanp.net</link>
	<description>E-commerce and SEO by Dean Peckenpaugh</description>
	<lastBuildDate>Thu, 17 May 2012 20:49:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Must-Have Greasemonkey Scripts for Volusion Back-end</title>
		<link>http://deanp.net/2012/04/must-have-greasemonkey-scripts-for-volusion-back-end/</link>
		<comments>http://deanp.net/2012/04/must-have-greasemonkey-scripts-for-volusion-back-end/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 19:36:40 +0000</pubDate>
		<dc:creator>Dean P.</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Volusion]]></category>

		<guid isPermaLink="false">http://deanp.net/?p=673</guid>
		<description><![CDATA[No web-based e-commerce software is perfect. They&#8217;re full of inefficiencies, wasted space, poorly-placed buttons and tabs, and cluttered interfaces. At first glance, some of these oversights and ill-planned functions don&#8217;t seem like a big deal &#8211; but for those of us whose daily job consists of working within this software, it is indeed an epic [...]]]></description>
			<content:encoded><![CDATA[<p>No web-based e-commerce software is perfect. They&#8217;re full of inefficiencies, wasted space, poorly-placed buttons and tabs, and cluttered interfaces. At first glance, some of these oversights and ill-planned functions don&#8217;t seem like a big deal &#8211; but for those of us whose daily job consists of working within this software, it is indeed an epic nightmare.</p>
<p>Over the past couple years a very talented JavaScript author and online store owner has been frequenting the <a href="http://forums.volusion.com" target="_blank">Volusion forums</a> and developing custom JavaScript solutions for store owners; nearly all of his work is free and for community use, although I sought him out numerous times for paid solutions.</p>
<p>Here is a collection of some of his free JavaScript solutions for the Volusion software&#8217;s back end. These are all scripts intended for Volusion&#8217;s V11 software and require Firefox&#8217;s <a href="https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/">Greasemonkey addon</a>. Users of <a href="https://www.google.com/chrome">Google&#8217;s Chrome browser</a> can install the <a href="https://chrome.google.com/webstore/detail/dhdgffkkebhmkfjojejmpbldmpobfkfo">Tampermonkey</a> addon to enable Greasemonkey scripts to run on Chrome.</p>
<h2>Disable &#8220;Clear entire table&#8221; Radio Button</h2>
<p><div id="attachment_689" class="wp-caption aligncenter" style="width: 610px"><img src="http://deanp.net/wp-content/uploads/2012/04/disable-clear-table-script1.jpg" alt="" title="disable-clear-table-script" width="600" height="299" class="size-full wp-image-689" /><p class="wp-caption-text">No more accidental data extinctions</p></div><br />
I&#8217;ve seen countless people grief on the forums about this. They go to import a CSV data file and mistakenly click the radio button for &#8220;Clear entire table (delete all records), and replace with this import file.&#8221; Just like that, a routine data update turns into an epic mass data deletion. This script disables the radio button.<br />
<br/><span class='collapseomatic ' id='id4618'  title="Click here for script">Click here for script</span>
<div id='target-id4618' class='collapseomatic_content '><br />
<pre><code>// ==UserScript==
// @name Disables &quot;Clear entire table&quot; radio button
// @author Marc Knobler
// @description Disables &quot;Clear entire table&quot; radio button
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @include */admin/db_import.asp*
// ==/UserScript==
jQuery(&#039;input:radio[value=&quot;T&quot;][name=&quot;OVERWRITE&quot;]&#039;).attr(&#039;disabled&#039;, true);
jQuery(&#039;select[name=&quot;import_type&quot;]&#039;).change(function(){
jQuery(&#039;input:radio[value=&quot;T&quot;][name=&quot;OVERWRITE&quot;]&#039;).attr(&#039;disabled&#039;, true);
return true;
});</code></pre></div>
</p>
<h2>Add Category ID Numbers to List of Product&#8217;s Categories</h2>
<p><img src="http://deanp.net/wp-content/uploads/2012/04/add-category-id-numbers.jpg" alt="" title="add-category-id-numbers" width="600" height="250" class="aligncenter size-full wp-image-690" /><br />
What a nightmare this can be.  Imagine that a product appears is numerous categories, as shown in the screenshot above.  Now imagine clicking that &#8220;Advanced&#8221; hyperlink, and seeing only the category ID numbers.  This script adds the category IDs in a set of brackets.  So if I want to remove this product from my &#8220;New Products&#8221; category, I now know to remove number 274 from the string of 334, 351, 135, 133, 346, 274, 410, 316, 299, 278.  Brilliant.<br />
<br/><span class='collapseomatic ' id='id8674'  title="Click here for script">Click here for script</span>
<div id='target-id8674' class='collapseomatic_content '><br />
<pre><code>// ==UserScript==
// @name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add cat # to list
// @author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marc Knobler
// @description&nbsp;&nbsp; Add cat # to list
// @require&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */admin/AdminDetails_Generic.asp?table=Products_Joined*
// ==/UserScript==
jQuery(&#039;[id^=&quot;category-&quot;]&#039;).each(function(){
jQuery(this).append(jQuery(this).attr(&#039;id&#039;).replace(&#039;category-&#039;,&#039; [&#039;)+&#039;]&#039;);
});</code></pre></div>
</p>
<h2>Convert Product / Category Tabs to Collapsible Subsections</h2>
<p><div id="attachment_699" class="wp-caption aligncenter" style="width: 600px"><img src="http://deanp.net/wp-content/uploads/2012/04/convert-tabs-to-collapsible-sections.jpg" alt="" title="convert-tabs-to-collapsible-sections" width="590" height="295" class="size-full wp-image-699" /><p class="wp-caption-text">V11 tabbed sections on the left - legacy collapsible sections on the right</p></div><br />
Anyone using the Volusion software on a daily basis had their world turned inside-out when V11 was released &#8211; the collapsible product sections had been converted over to a left-oriented tabbed menu.  This resulted in an far more clicks to accomplish the same tasks, and it took away the ability to expand all menus and view everything at once.  This script reverts that change.  An additional script is available to restore the same functionality to categories.</p>
<p>These two scripts are also available on userscripts.org</p>
<p>Product script: <a href="http://userscripts.org/scripts/show/113396">http://userscripts.org/scripts/show/113396</a></p>
<p>Category Script: <a href="http://userscripts.org/scripts/show/113400">http://userscripts.org/scripts/show/113400</a></p>
<p><span class='collapseomatic ' id='id707'  title="Click here for Product script">Click here for Product script</span>
<div id='target-id707' class='collapseomatic_content '><pre><code>// Copyright (c) 2011, Marc Knobler (m.knobler@gmail.com)
// Released under the GPL license - http://www.gnu.org/copyleft/gpl.html
//
// --------------------------------------------------------------------

// ==UserScript==
// @name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYE BYE Silly Volusion Product Page Tabs
// @author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marc Knobler
// @version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v1 / 2011.09.18
// @description&nbsp;&nbsp; Removes default Volusion tabs on Volusion V11 and returns the W09 style
// @require&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */admin/AdminDetails_Generic.asp?table=Products_Joined*
// ==/UserScript==

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

jQuery.cookie = function(name, value, options) {
&nbsp;&nbsp;&nbsp;&nbsp;if (typeof value != &#039;undefined&#039;) { // name and value given, set cookie
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options = options || {};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (value === null) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options.expires = -1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var expires = &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (options.expires &amp;&amp; (typeof options.expires == &#039;number&#039; || options.expires.toUTCString)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var date;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof options.expires == &#039;number&#039;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date = new Date();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date = options.expires;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires = &#039;; expires=&#039; + date.toUTCString(); // use expires attribute, max-age is not supported by IE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// CAUTION: Needed to parenthesize options.path and options.domain
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// in the following expressions, otherwise they evaluate to undefined
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// in the packed version for some reason...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var path = options.path ? &#039;; path=&#039; + (options.path) : &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var domain = options.domain ? &#039;; domain=&#039; + (options.domain) : &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var secure = options.secure ? &#039;; secure&#039; : &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.cookie = [name, &#039;=&#039;, encodeURIComponent(value), expires, path, domain, secure].join(&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;} else { // only name given, get cookie
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cookieValue = null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (document.cookie &amp;&amp; document.cookie != &#039;&#039;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cookies = document.cookie.split(&#039;;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; cookies.length; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cookie = jQuery.trim(cookies[i]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Does this cookie string begin with the name we want?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (cookie.substring(0, name.length + 1) == (name + &#039;=&#039;)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cookieValue;
&nbsp;&nbsp;&nbsp;&nbsp;}
};
// Cookie plugin Copyright (c) 2006 Klaus Hartl (stilbuero.de)

GM_addStyle(&quot;.a65chromeheader_advanced {background: url(\&quot;/a/a/65/i/chrome_header.gif\&quot;) repeat-x scroll 0 0 transparent; cursor: pointer; height: 39px; }&quot;);
GM_addStyle(&quot;.active_ {background: url(\&quot;/a/a/65/i/shadow_down_arrow.png\&quot;) no-repeat scroll 22px 13px transparent; }&quot;);
GM_addStyle(&quot;.AdvancedGroupPanel { padding: 0px 20px 0px 20px; }&quot;);

//remove Volusion styling
jQuery(&#039;.AdvancedTabPanel&#039;).remove();
jQuery(&#039;[id^=&quot;AdvancedTabGroup&quot;]&#039;).removeClass(&#039;AdvancedTabGroup&#039;);
jQuery(&#039;[id^=&quot;AdvancedTabGroup&quot;]&#039;).css(&#039;display&#039;,&#039;none&#039;);
jQuery(&#039;[id^=&quot;AdvancedTabGroup&quot;]&#039;).each(function(){
var currentId = $(this).attr(&#039;id&#039;);
jQuery(this).attr(&#039;id&#039;, currentId + &#039;_&#039;);
});

//add clickable headers to each section
jQuery(&#039;#AdvancedTabGroup_SEO_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Seo&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Search Engine Optimization&lt;/span&gt;&lt;span id=&quot;arrow_Seo&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Pricing_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Pricing&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Pricing&lt;/span&gt;&lt;span id=&quot;arrow_Pricing&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Shipping_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Shipping&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Shipping&lt;/span&gt;&lt;span id=&quot;arrow_Shipping&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Descriptions_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Descriptions&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Product Descriptions&lt;/span&gt;&lt;span id=&quot;arrow_Descriptions&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Display_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Display&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Product Display&lt;/span&gt;&lt;span id=&quot;arrow_Display&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Misc_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Misc&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Misc&lt;/span&gt;&lt;span id=&quot;arrow_Misc&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_ThirdParty_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_ThirdParty&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;3rd Party Integrations&lt;/span&gt;&lt;span id=&quot;arrow_ThirdParty&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_CustomFields_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_CustomFields&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Custom Fields&lt;/span&gt;&lt;span id=&quot;arrow_CustomFields&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Recurring_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Recurring&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Recurring Pricing&lt;/span&gt;&lt;span id=&quot;arrow_Recurring&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_PricingLevels_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_PricingLevels&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Pricing Levels&lt;/span&gt;&lt;span id=&quot;arrow_PricingLevels&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Stock_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Stock&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Stock&lt;/span&gt;&lt;span id=&quot;arrow_Stock&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
jQuery(&#039;#AdvancedTabGroup_Vendor_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Vendor&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Vendors&lt;/span&gt;&lt;span id=&quot;arrow_vendors&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
//add clickable headers to each section

//check cookie and preset tabs
var tab_selected= jQuery.cookie(&#039;tab_selected&#039;);
if (tab_selected == null) {tab_selected=&#039;&#039;}

if (tab_selected.indexOf(&#039;1&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_SEO_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Seo&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;2&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Pricing_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Pricing&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;3&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Shipping_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Shipping&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;4&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Descriptions_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Descriptions&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;5&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Display_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Display&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;6&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Misc_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Misc&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;7&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_ThirdParty_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_ThirdParty&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;8&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_CustomFields_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_CustomFields&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;9&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Recurring_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Recurring&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;a&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_PricingLevels_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_PricingLevels&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;b&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Stock_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Stock&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;c&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Vendor_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Vendor&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
//check cookie and preset tabs

//toggle tabs per user click
//jQuery(&#039;#tab_Seo&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
//jQuery(&#039;[id^=&quot;AdvancedTabGroup_SEO_&quot;]&#039;).toggle();
&nbsp;&nbsp;&nbsp;&nbsp;
jQuery(&#039;#tab_Seo&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_SEO_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Seo&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;1&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/1/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_Pricing&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Pricing_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Pricing&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;2&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/2/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_Shipping&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Shipping_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Shipping&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;3&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/3/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_Descriptions&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Descriptions_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Descriptions&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;4&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/4/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_Display&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Display_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Display&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;5&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/5/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_Misc&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Misc_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Misc&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;6&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/6/,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_ThirdParty&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_ThirdParty_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_ThirdParty&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;7&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/7/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_CustomFields&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_CustomFields_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_CustomFields&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;8&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/8/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_Recurring&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Recurring_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Recurring&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;9&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/9/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_PricingLevels&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_PricingLevels_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_PricingLevels&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;a&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/a/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
});

jQuery(&#039;#tab_Stock&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Stock_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Stock&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;b&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/b/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
});

jQuery(&#039;#tab_Vendor&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Vendor_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_vendors&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;c&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/c/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;tab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;

});
//toggle tabs per user click</code></pre></div>
<br />
<br/><span class='collapseomatic ' id='id337'  title="Click here for Categoryscript">Click here for Categoryscript</span>
<div id='target-id337' class='collapseomatic_content '><pre><code>// ==UserScript==
// @name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYE BYE Silly Volusion Category Page Tabs
// @author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marc Knobler
// @version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v1 / 2011.09.18
// @description&nbsp;&nbsp; Removes default Volusion tabs on Volusion V11 and returns to W09 style on category pages
// @require&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */admin/AdminDetails_Generic.asp?table=Categories*
// ==/UserScript==

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */
// Cookie plugin Copyright (c) 2006 Klaus Hartl (stilbuero.de)
jQuery.cookie = function(name, value, options) {
&nbsp;&nbsp;&nbsp;&nbsp;if (typeof value != &#039;undefined&#039;) { // name and value given, set cookie
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options = options || {};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (value === null) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options.expires = -1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var expires = &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (options.expires &amp;&amp; (typeof options.expires == &#039;number&#039; || options.expires.toUTCString)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var date;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof options.expires == &#039;number&#039;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date = new Date();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date = options.expires;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires = &#039;; expires=&#039; + date.toUTCString(); // use expires attribute, max-age is not supported by IE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// CAUTION: Needed to parenthesize options.path and options.domain
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// in the following expressions, otherwise they evaluate to undefined
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// in the packed version for some reason...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var path = options.path ? &#039;; path=&#039; + (options.path) : &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var domain = options.domain ? &#039;; domain=&#039; + (options.domain) : &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var secure = options.secure ? &#039;; secure&#039; : &#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.cookie = [name, &#039;=&#039;, encodeURIComponent(value), expires, path, domain, secure].join(&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;} else { // only name given, get cookie
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cookieValue = null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (document.cookie &amp;&amp; document.cookie != &#039;&#039;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cookies = document.cookie.split(&#039;;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; cookies.length; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cookie = jQuery.trim(cookies[i]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Does this cookie string begin with the name we want?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (cookie.substring(0, name.length + 1) == (name + &#039;=&#039;)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cookieValue;
&nbsp;&nbsp;&nbsp;&nbsp;}
};
// Cookie plugin Copyright (c) 2006 Klaus Hartl (stilbuero.de)

GM_addStyle(&quot;.a65chromeheader_advanced {background: url(\&quot;/a/a/65/i/chrome_header.gif\&quot;) repeat-x scroll 0 0 transparent; cursor: pointer; height: 39px; }&quot;);
GM_addStyle(&quot;.active_ {background: url(\&quot;/a/a/65/i/shadow_down_arrow.png\&quot;) no-repeat scroll 22px 13px transparent; }&quot;);
GM_addStyle(&quot;.AdvancedGroupPanel { padding: 0px 20px 0px 20px; }&quot;);

//remove Volusion styling
jQuery(&#039;.AdvancedTabPanel&#039;).remove();
jQuery(&#039;[id^=&quot;AdvancedTabGroup&quot;]&#039;).removeClass(&#039;AdvancedTabGroup&#039;);
jQuery(&#039;[id^=&quot;AdvancedTabGroup&quot;]&#039;).css(&#039;display&#039;,&#039;none&#039;);
jQuery(&#039;[id^=&quot;AdvancedTabGroup&quot;]&#039;).each(function(){
var currentId = $(this).attr(&#039;id&#039;);
jQuery(this).attr(&#039;id&#039;, currentId + &#039;_&#039;);
});

//add clickable headers to each section
jQuery(&#039;#AdvancedTabGroup_CategoryDesc_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_CategoryDesc&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Category Descriptions&lt;/span&gt;&lt;span id=&quot;arrow_CategoryDesc&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);

jQuery(&#039;#AdvancedTabGroup_SEO_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_SEO&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Search Engine Optimization&lt;/span&gt;&lt;span id=&quot;arrow_SEO&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);

jQuery(&#039;#AdvancedTabGroup_CategoryDisplay_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_CategoryDisplay&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Category Display&lt;/span&gt;&lt;span id=&quot;arrow_CategoryDisplay&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);

jQuery(&#039;#AdvancedTabGroup_SubcategoryDisplay_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_SubcategoryDisplay&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Subcategory Display&lt;/span&gt;&lt;span id=&quot;arrow_SubcategoryDisplay&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);

jQuery(&#039;#AdvancedTabGroup_ProductDisplay_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_ProductDisplay&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Product Display&lt;/span&gt;&lt;span id=&quot;arrow_ProductDisplay&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);

jQuery(&#039;#AdvancedTabGroup_Misc_&#039;).before(&#039;&lt;div class=&quot;a65chromepanel&quot;&gt;&lt;div id=&quot;tab_Misc&quot; class=&quot;a65chromeheader_advanced&quot;&gt;&lt;div class=&quot;a65chromeheader_right&quot;&gt;&lt;div class=&quot;a65chromeheader_left&quot;&gt;&lt;span class=&quot;a65chromeheadertext&quot;&gt;Misc&lt;/span&gt;&lt;span id=&quot;arrow_Misc&quot; class=&quot;arrow_link&quot;&gt;&lt;/span&gt;&lt;span class=&quot;a65chromesubtext&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#039;);

//add clickable headers to each section

//check cookie and preset tabs
var tab_selected= jQuery.cookie(&#039;ctab_selected&#039;);
if (tab_selected == null) {tab_selected=&#039;&#039;}

if (tab_selected.indexOf(&#039;1&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_CategoryDesc_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_CategoryDesc&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;2&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_SEO_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_SEO&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;3&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_CategoryDisplay_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_CategoryDisplay&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;4&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_SubcategoryDisplay_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_SubcategoryDisplay&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;5&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_ProductDisplay_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_ProductDisplay&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}
if (tab_selected.indexOf(&#039;6&#039;) !=-1)
{
jQuery(&#039;#AdvancedTabGroup_Misc_&#039;).toggle(&quot;fast&quot;);
jQuery(&#039;#tab_Misc&#039;).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
}

//check cookie and preset tabs

//toggle tabs per user click
jQuery(&#039;#tab_CategoryDesc&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_CategoryDesc_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_CategoryDesc&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;1&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/1/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_SEO&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_SEO_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_SEO&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;2&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/2/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_CategoryDisplay&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_CategoryDisplay_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_CategoryDisplay&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;3&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/3/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_SubcategoryDisplay&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_SubcategoryDisplay_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_SubcategoryDisplay&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;4&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/4/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_ProductDisplay&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_ProductDisplay_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_ProductDisplay&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;5&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/5/g,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});

jQuery(&#039;#tab_Misc&#039;).click(function() {
jQuery(&#039;#AdvancedTabGroup_Misc_&#039;).toggle(&quot;fast&quot;);
jQuery(this).find(&quot;.arrow_link&quot;).toggleClass(&quot;active_&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if (jQuery(&quot;#arrow_Misc&quot;).hasClass (&quot;active_&quot;)) {
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected+= &#039;6&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;tab_selected=tab_selected.replace(/6/,&#039;&#039;);
&nbsp;&nbsp;&nbsp;&nbsp;$.cookie(&#039;ctab_selected&#039;, tab_selected, { expires: 3650, path: &#039;/&#039; });
&nbsp;&nbsp;&nbsp;&nbsp;}
});
//toggle tabs per user click</code></pre></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://deanp.net/2012/04/must-have-greasemonkey-scripts-for-volusion-back-end/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E-commerce Bandwidth Fees Too High? Store Data in the Cloud.</title>
		<link>http://deanp.net/2012/04/e-commerce-bandwidth-fees-too-high-store-data-in-the-cloud/</link>
		<comments>http://deanp.net/2012/04/e-commerce-bandwidth-fees-too-high-store-data-in-the-cloud/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 20:36:44 +0000</pubDate>
		<dc:creator>Dean P.</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Volusion]]></category>

		<guid isPermaLink="false">http://deanp.net/?p=589</guid>
		<description><![CDATA[Some e-commerce hosts offer very little bandwidth transfer per month for their customers. In the same way that wireless phone companies used to depend on overages for steady revenue (I would know, I because I worked in wireless back when no one had a phone), Volusion, for example, now depends on massive customer overages as [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-600" title="Volusion-bandwidth-overage-too-damn-high" src="http://deanp.net/wp-content/uploads/2012/03/Volusion-bandwidth-overage-too-damn-high.jpg" alt="" width="380" height="454" /></p>
<p>Some e-commerce hosts offer very little bandwidth transfer per month for their customers. In the same way that wireless phone companies used to depend on overages for steady revenue (I would know, I because I worked in wireless back when no one had a phone), Volusion, for example, now depends on massive customer overages as a steady and reliable stream of revenue.</p>
<p>Now, I can&#8217;t disclose the monthly bill for my company&#8217;s site, but I can say that it&#8217;s well over five times the base price point and it&#8217;s all due to overage fees. Volusion&#8217;s <a href="http://support.volusion.com/article/volusion-store-plan-bandwidth-allotment-and-overages">published plans price overage at $7 to $5 per gigabyte</a>, depending on your plan. Their unpublished enterprise-level plans, like the one Allparts is on, prices bandwidth overage at $4 per gigabyte. Not much of a price break is it?</p>
<p>To put that into perspective, that&#8217;s 1 gallon of gas vs. 1 gigabyte of data transfer. Get real!</p>
<p>Enough is enough. Check out the steps below and follow along as I migrate key content on Allparts.com to <a href="http://aws.amazon.com/cloudfront/">Amazon&#8217;s CloudFront CDN</a> service.</p>
<h2>Step 1: Identify High-Bandwidth Content</h2>
<p>First thing&#8217;s first &#8211; the files that are responsible for the most bandwidth are going to get migrated first. I identify those by logging into the website stats page provided by my host. I run a report that displays my most requested files (which could be images, CSS, javascript, etc.) and sort by bandwidth usage.</p>
<div id="attachment_615" class="wp-caption aligncenter" style="width: 780px"><img class="size-full wp-image-615" title="high-bandwidth-file-1" src="http://deanp.net/wp-content/uploads/2012/04/high-bandwidth-file-1.jpg" alt="" width="770" height="176" /><p class="wp-caption-text">This file was involved in over 3 gigabytes of bandwidth in a short period of time.</p></div>
<p>My number one drag on bandwidth turns out to be part of the image slider that I recently installed on the home page. In the small date range that I chose, &#8220;mootools.js&#8221; was involved in over 3 gigs of bandwidth usage. At $5 a gig, that&#8217;s $15 gone &#8211; poof &#8211; and it will turn into much more after traffic ramps up through the rest of the month. For comparison, consider serving that file through <a href="amazon cloudfront">Amazon&#8217;s Cloudfront</a> service at 12 cents per gig.</p>
<p>Those numbers are correct &#8211; $15 on Volusion vs 36 cents on Cloudfront.</p>
<p>Unfortunately, the remaining files in my top 5 list are either index files or files that are inaccessible and necessary. There are undoubtedly a large quantity of files that you can migrate to CloudFront to save bandwidth, but we&#8217;ll focus on this single file for now.</p>
<h2>Step 2: Create an Amazon S3 Bucket (optional)</h2>
<p>This is optional &#8211; if you skip directly to creating a CloudFront Distribution, you can start using that CloudFront URL immediately. But if you&#8217;re like me and already have data stored on S3, you&#8217;ll want to serve that data through your CloudFront distribution, like so&#8230;</p>
<p><a href="http://aws.amazon.com/s3/">Amazon&#8217;s S3</a> stands for Simple Storage Service. It is exactly that, a simple way to store your data online. After signing up for S3, you&#8217;ll want to create a bucket to store things in, and then create subfolders within that bucket to organize data. This bucket becomes part of your Amazon S3 URL. For this exercise, I&#8217;ll store data in Allparts Music Corporation&#8217;s APMC bucket, and then I&#8217;ll create subfolders within that bucket. Next, I upload my data.</p>
<div id="attachment_617" class="wp-caption aligncenter" style="width: 696px"><img class="size-full wp-image-617" title="file-in-s3-bucket" src="http://deanp.net/wp-content/uploads/2012/04/file-in-s3-bucket.jpg" alt="" width="686" height="244" /><p class="wp-caption-text">My S3 bucket, with subfolders, and finally my high-bandwidth file</p></div>
<p>I can now access my file through its S3 URL at https://s3.amazonaws.com/apmc/data/slider/engine/js/mootools.js (be sure you&#8217;ve set the permissions properly). I could stop here if I wanted to, and simply edit the HTML and code on my website so that this file (located on S3) is utilized instead of the one located on Volusion&#8217;s server. I&#8217;m going to take it a step further and utilize another Amazon web service &#8211; CloudFront.</p>
<h2>Step 3: Create a CloudFront Distribution</h2>
<p>First a preface: CloudFront is a CDN, or <a href="http://en.wikipedia.org/wiki/Content_delivery_network">Content Delivery Network.</a> The purpose of a CDN is to serve your information from different servers in different locations so that your visitors can have the fastest access to your site. For example, if someone visits your site from the west coast, data may be sent out from a server in California, or it may come from a server in Dallas or Austin if you&#8217;re in Houston &#8211; and the same is true for other parts of the country and the world.</p>
<p>Now I create a new CloudFront distribution. I choose &#8220;Download&#8221; as my delivery method, because I&#8217;m not streaming out videos. For the origin of my data, I choose either the S3 option and select my APMC bucket that I created in the previous step or, if not utilizing S3 buckets, I choose a &#8220;Custom Origin,&#8221; which is simply my website URL.<br />
<img class="aligncenter size-full wp-image-625" title="create-cloudfront-distribution" src="http://deanp.net/wp-content/uploads/2012/04/create-cloudfront-distribution.jpg" alt="" width="611" height="168" /></p>
<p>Amazon then gives me the CloudFront URL of d1e41orfkrjn0h.cloudfront.net. This URL can now be used for my S3 bucket. Let&#8217;s revisit that:</p>
<p>https://<span style="color: #ff0000;">s3.amazonaws.com/apmc</span><span style="color: #0000ff;">/data/slider/engine/js/</span><span style="color: #00ff00;">mootools.js</span></p>
<p>where&#8230;</p>
<p><span style="color: #ff0000;">s3.amazonaws.com/apmc</span> is my bucket, and</p>
<p><span style="color: #0000ff;">/data/slider/engine/js/</span><span style="color: #00ff00;">mootools.js</span> is my subfolder structure leading to my file.</p>
<p>So to serv my javascript file through the CloudFront CDN, I use this address:</p>
<p>https://d1e41orfkrjn0h.cloudfront.net/data/slider/engine/js/mootools.js</p>
<p>If I chose &#8220;Custom Origin,&#8221; I simply use my new CloudFront URL as my root directory in my template coding.  In a Volusion store, for example, I could use the following code to display a cat image hosted on my Volusion store:</p>
<p>&lt;img src=&#8221;/v/vspfiles/images/cat.jpg&#8221;&gt;</p>
<p>To pull the image from CloudFront instead, I&#8217;d change that to:</p>
<p>&lt;img src=&#8221;//d2iypz22vd7n8h.cloudfront.net/v/vspfiles/images/cat.jpg&#8221;&gt;</p>
<h2>Step 4: Update Your Website Template</h2>
<p>Now that I have my files organized into buckets, and have those buckets set up into distributions, I can now go back to my template and update my links with the CloudFront URL.</p>
<p>With this single change, I will have brought at least $100 a month in savings to my company. By moving additional high-bandwidth content away from Volusion, not only do our savings become very large, but we also deliver that content to our customers much faster.</p>
<p>I have no doubt that you can see how fast, easy, and cheap this process is. Don&#8217;t let bandwidth overage fees cut into your profits &#8211; reclaim your earnings, give your host the finger, and deliver content quickly and securely by migrating your data to a CDN.</p>
]]></content:encoded>
			<wfw:commentRss>http://deanp.net/2012/04/e-commerce-bandwidth-fees-too-high-store-data-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>4 Steps to Prevent Data Loss at Your Small Business</title>
		<link>http://deanp.net/2012/03/4-steps-to-prevent-data-loss-at-your-small-business/</link>
		<comments>http://deanp.net/2012/03/4-steps-to-prevent-data-loss-at-your-small-business/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 19:35:46 +0000</pubDate>
		<dc:creator>Dean P.</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[products]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[small business]]></category>

		<guid isPermaLink="false">http://deanp.net/?p=568</guid>
		<description><![CDATA[Your small business probably has a lot of important, perhaps even irreplaceable digital information. Think of everything you, your employees, your suppliers, and your customers interact with every day &#8211; trivial things from your digital letterhead or to critical accounting database files. Or maybe you have an e-commerce store with 5,000 product images that you&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Your small business probably has a lot of important, perhaps even irreplaceable digital information. Think of everything you, your employees, your suppliers, and your customers interact with every day &#8211; trivial things from your digital letterhead or to critical accounting database files. Or maybe you have an e-commerce store with 5,000 product images that you&#8217;ve paid a professional photographer for.</p>
<p>Unless you&#8217;ve taken the proper precautions, you&#8217;re only one power outage or hard drive failure away from complete data loss. Here are my 4 steps, drawn from my experience helping friends, family, and companies, on how to prevent data loss at your small business.</p>
<p>First let me say that there are a lot of ways to secure and backup your data; it can be pretty cheap, incredibly expensive, and everywhere in between. These are just my recommendations; leave your own in the comments.</p>
<p>I should also add that this post was inspired by a recent near-disaster involving some data loss.  I&#8217;d like to publicly thank <a href="https://plus.google.com/u/0/107323672832424761989/posts">Tom Duke</a> with <a href="http://innovativit.com/">Innovativ IT</a> here in Houston, TX for his outstanding work in retrieving my data.</p>
<h2>Step 1: Move from &#8220;My Documents&#8221; to Network Storage</h2>
<p><img class="alignright" src="http://www.synology.com/products/img/top/DS212+.jpg" alt="" width="200" height="230" /></p>
<h3>Cost: $400+</h3>
<p>This is the most expensive and technically laborious step of the process &#8211; the rest is all downhill and pretty cheap.</p>
<p>If you&#8217;re storing your critical data in your My Documents folder or on your desktop in 2012, it&#8217;s time to evolve. If your computer is like most of the computers in a small business, it probably has one physical hard drive with that user&#8217;s information stored on it. When that drive fails because it&#8217;s been spinning and spinning for years, that user&#8217;s data is gone forever.</p>
<p>The solution is <a href="http://en.wikipedia.org/wiki/Network-attached_storage">Network Attached Storage</a>, or NAS.</p>
<p>A NAS device attaches to your network and is always &#8220;on&#8221; and available to store data on. Whether your network consists of you, alone, plugged into your cable / DSL modem, or 25 computers at your office, it is important to centralize your data storage</p>
<p><strong>Tip:</strong> Since you&#8217;re moving all your data to the NAS, I suggest that you simultaneously reorganize your files so they&#8217;re easier to find.</p>
<p>I highly recommend a NAS that also provides <a href="http://en.wikipedia.org/wiki/RAID">RAID</a> functionality. RAID is a system by which data is stored on multiple hard drives. The most common form of RAID (RAID 1) consists of 2 drives with identical content. Store a picture on your NAS, and that picture is stored on 2 drives, ensuring that if one drive fails, you have that picture mirrored to another functioning drive.</p>
<p>I have had positive experiences with <a href="http://www.qnap.com/USEng/">QNAP</a> and <a href="http://www.synology.com/us/index.php">Synology</a> NAS/RAID products.</p>
<p><strong>Tip:</strong> For RAID, it is preferable to have two identical hard drives &#8211; and they have to be capable of RAID. Many entry-level Western Digital brand hard drives are not capable of RAID, but Seagate (Barracudas) are.</p>
<h2>Step 2: Backup the Backup</h2>
<p><img class="alignright" src="http://lh6.googleusercontent.com/public/K1Xx9pMm8flzzhdoZYUfOcf9S5UCrRvR64xVpmPehxS_bzm3KjBmQVgLYtCKK3rXiEN7el4Er_nPX-g_9I72ViHh0dhObs9tnOjmkaDVB9v8GgZWdlCSNqvDSrEV4FCZCWv9cCTqCLd0BYXDYEMYzjFurbk" alt="" width="132" height="132" /></p>
<h3>Cost: $150+</h3>
<p>Now that you and your team are storing your sensitive data on a NAS, and that NAS is further securing your data with RAID, it&#8217;s time to backup your backup. Yes, even RAID needs backup, because even though you&#8217;re storing data on two identical drives, that entire NAS unit could fail and corrupt both of your drives.</p>
<p>I recommend a simple external hard drive. This drive connects directly to your NAS and serves as a backup for your NAS. Simply connect your external drive, log into your NAS, schedule a complete and recurring backup (e.g., over the weekend, every weekend), and walk away.  Most external drives connect via <a href="http://en.wikipedia.org/wiki/Universal_Serial_Bus">USB</a>, but newer drives and NAS units will have <a href="http://en.wikipedia.org/wiki/Serial_ATA#eSATA">external SATA (eSATA)</a> interfaces, or <a href="http://en.wikipedia.org/wiki/ESATAp">both</a>.</p>
<h2>Step 3: Keep the Lights On</h2>
<p><img class="alignright" src="http://www.tripplite.com/shared/product-images/lg/AVR900U-FRONT-L.jpg" alt="" width="180" height="180" /></p>
<h3>Cost: $100+</h3>
<p>All of this extra equipment is no good if the power goes out while you&#8217;re in the middle of accessing or moving your data. Not only will your data be inaccessible while everything powers back on, but files (or hard drives) that were being used at the time of the outage might also be corrupted and lost.</p>
<p>Invest in a UPS. Not the package courier, but an <a href="http://en.wikipedia.org/wiki/Uninterruptible_power_supply">uninterruptible power supply</a>. A UPS is like a power strip, or surge protector, but with a large battery attached. High-end UPS units will supply your devices with pure sine wave power, provide load balancing and surge suppression, keep your devices powered up during an outage, and even automatically shut down some attached devices. <a href="http://www.tripplite.com/en/index.cfm">Tripp Lite,</a> <a href="http://www.apc.com/site/apc/index.cfm?ISOCountryCode=us">APC</a> and <a href="http://www.cyberpowerpc.com/">CyberPower</a> are leading brands that I endorse.</p>
<h2>Step 4: Send it All to The Cloud</h2>
<h3>Cost: $30+ monthly</h3>
<p>Good news! Your small business&#8217;s data is backed up really well. For around $600 you&#8217;ve evolved from squinting at icons on your desktop to an organized, well-structured, redundantly backed-up hardware configuration. The bad news is that a meteor might fall on your office and destroy your new hardware investment and your data.</p>
<p>The solution in this case is remote backup &#8211; store your information on another server somewhere else on the Internet. There are a number of companies that provide this service with automation, including <a href="http://mozy.com/">Mozy</a> and <a href="http://www.carbonite.com/en/">Carbonite</a>. Some NAS devices, like many of QNAP&#8217;s products, have <a href="http://aws.amazon.com/s3/">Amazon S3</a> updating built in.</p>
<h2>Step 5: Relax and Prosper</h2>
<h3>Cost: $3.00 each at happy hour</h3>
<p>It&#8217;s 6:00 PM, everyone has gone home, the office is locked up, and you can rest assured that your data is safe, secure, and backed up across multiple networks.  This is one of those cases where the cost of prevention is much cheaper than the cost of re-acquisition, rebuilding, and re-creating &#8211; assuming your data isn&#8217;t already unique and priceless.</p>
<p>Protect the future of your business with these smart and affordable investments today &#8211; and of course, <a href="http://deanp.net/contact/">contact me</a> if you have questions or need help.</p>
]]></content:encoded>
			<wfw:commentRss>http://deanp.net/2012/03/4-steps-to-prevent-data-loss-at-your-small-business/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>META Descriptions aren&#8217;t Dead</title>
		<link>http://deanp.net/2012/02/meta-descriptions-arent-dead/</link>
		<comments>http://deanp.net/2012/02/meta-descriptions-arent-dead/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 19:45:43 +0000</pubDate>
		<dc:creator>Dean P.</dc:creator>
				<category><![CDATA[Answers]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[SERP]]></category>
		<category><![CDATA[Volusion]]></category>

		<guid isPermaLink="false">http://deanp.net/?p=469</guid>
		<description><![CDATA[A Volusion blogger says META descriptions don't matter. SEO is all backlinks and social sharing now days, right?  I disagree entirely, and I see the META-D as one of the most important and free search engine optimizations you can make.]]></description>
			<content:encoded><![CDATA[<p>I recently read (and quickly commented on) <a href="http://onlinebusiness.volusion.com/articles/top-secret-4-seo-tricks-google-doesnt-want-you-to-know/" target="_blank">a post on Volusion&#8217;s blog</a> entitled &#8220;4 SEO Tricks Google Doesn&#8217;t Want You to Know.&#8221; Although Volusion is first and foremost an e-commerce platform provider, and search engine optimization is a component of success in e-commerce, Volusion is not an expert on SEO &#8211; says I, anyway.</p>
<p>Nevertheless I read their blog regularly, and I find that, although they aren&#8217;t SEO experts, they do tend to give solid advice for the intermediate online store owner. That said, part of their recent post made me <a href="http://en.wikipedia.org/wiki/Facepalm">facepalm</a>.</p>
<h2>META-D&#8217;s are What!?</h2>
<p>Secret #1 on the Volusion blog states &#8220;Secret #1: Meta tags and descriptions are Google garbage.&#8221; Post author Matt Winn argues that META-D (along with keywords and titles) were once important factors in Google&#8217;s algorithm, but that Google doesn&#8217;t consider them so much now. I suppose I can agree with that. He also adds a caveat (which I don&#8217;t recall being there <a href="http://onlinebusiness.volusion.com/articles/top-secret-4-seo-tricks-google-doesnt-want-you-to-know/#comment-24527">when I made my comment</a>) stating that:</p>
<blockquote><p>&#8220;&#8230;while Google doesn’t care about your meta descriptions, it’s still helpful to your readers.&#8221;</p></blockquote>
<p>I&#8217;m really tempted to agree with that statement as well, but doing so reinforces a concept that am inclined to disagree with &#8211; the idea that writing for Google is more important than writing for readers.</p>
<h2>Writing for Google and Writing for Humans</h2>
<p>The following is true of small entries like page titles and META-D, to multi-paragraph pages of content: time and again, I see content that is written with keywords strategically placed, or sometimes forcefully stuffed, where it really doesn&#8217;t belong &#8211; all in an attempt to meet some secret ethereal standard for keywords and to stretch out otherwise mundane and brief statements, paragraphs, and descriptions.</p>
<p>More often than not, this leads to keyword overuse, which leads to unnatural looking / sounding content, which leads to poor rankings &#8211; all because you tried to write what you think Google wants to read instead of what humans want to read. Fellow Volusion store owner Nick Morgan wrote <a href="http://www.seomoz.org/blog/lessons-learned-by-an-over-optimizer-14730">an article featured on SEOmoz recently</a> that addresses keyword overuse. Nick mentions my views on this topic in his post, so obviously this is something I tend to grief about regularly.</p>
<p>The truth is this &#8211; All of Google&#8217;s algorithms and math and magic are designed to mimic human logic. Google is supposed to be like your human friend, a friend who knows how to answer you based on where you are, things you&#8217;ve asked before, who your friends are, what they think, and how well it knows you. With each passing week Google gets better and better at filtering out spammy crap and collecting well-written relevant content that humans are looking for.</p>
<p>Google&#8217;s target audience is humans, not other machines. This is why your content needs to be written for humans, and the first opportunity your content has to reach humans is your META-D and Title.</p>
<h2>Try it Yourself</h2>
<p>But really &#8211; what good are rankings if your search engine results page listing looks terrible? Is being in SERP position number 1 always better than number 2 or 3, regardless of what&#8217;s on in your title and description?</p>
<p>Try this out:</p>
<p>1) Go Google a term or phrase that you don&#8217;t know about, like elephant stomach.</p>
<p>2) Cross your eyes (or take off your glasses) such that the text on your monitor is too blurry to read, but not so much that your vision is doubled.</p>
<p>3) Look at the SERP. Since you can&#8217;t read the blurred text of the entries, the position (which you can still see) of the entries becomes the deciding factor on where you may click. Closer to the top is more relevant, right? Isn&#8217;t that for you to decide?</p>
<p>Now uncross your eyes and see the results like most humans do. What&#8217;s attractive and relevant now? Maybe result number one is best, and maybe not. The point is that now you aren&#8217;t clicking blind; now you have a choice, and the content you read, not necessarily the position of that content, is a big factor in where you click.</p>
<p><img class="alignnone size-full wp-image-481" title="metas-and-titles-for-humans" src="http://deanp.net/wp-content/uploads/2012/02/metas-and-titles-for-humans.jpg" alt="" width="567" height="322" /></p>
<h2>Basic SERP Template</h2>
<p>First know this &#8211; Depending on what &#8220;decision&#8221; Google makes on relevancy, it may not always display the META-D that you define.</p>
<p>That said, here are some suggestions on how to write your titles and descriptions to maximize your SERP listing for clickability.</p>
<p><span style="color: #0000ff;">[1) Met Descriptions aren't Dead] [2) - ] [3) DeanP.net]</span><br />
[4) Feb 21, 2012 ... META Descriptions are still critical to SEO. You're reading mine now. Here's<br />
how you can optimize your META-D for clickability.]<br />
<span style="color: #008000;"> [5) deanp.net/2012/02/meta-descriptions-arent-dead/]</span></p>
<p><span style="color: #0000ff;">[1) Page on Site] [2) Separator] [3) Site Name or URL]</span><br />
[4) We have the product you want. This is who we are. Here's a trust-building statement.<br />
Brief elevator pitch. Quick deal or offer. Less than 160 characters.]<br />
<span style="color: #008000;"> [5) URL-that-matches-what's-been-written-above]</span></p>
<p><span style="color: #0000ff;">[1) WHAT] [2) Separator] [3) WHO]</span><br />
[4) WHY you should click here. WHY you should click here. WHY you should click here.<br />
WHY you should click here. WHY you should click here.]<br />
<span style="color: #008000;"> [5) WHERE]</span></p>
<p><span style="color: #0000ff;">[PAGE TITLE]</span><br />
[4)[META DESCRIPTION. META DESCRIPTION. META DESCRIPTION.<br />
META DESCRIPTION. META DESCRIPTION.]<br />
<span style="color: #008000;"> [5) URL]</span></p>
<p>1) Let the visitor know what they&#8217;re going to be looking at. This should be similar to the H1 content on your page. Catchy and flashy take a backseat to accurate.</p>
<p>2) Separate your thoughts. Keep it neat and presentable. <a href="http://www.youtube.com/watch?v=T2_7PTio3Qc">Matt Cutts says that pipes and hyphens are fine</a>.</p>
<p>3) Tell your visitor who is responsible for this content. If you have a short URL like me, stick that in here. If your business name is more important than your URL, maybe use that.</p>
<p>4) This is the big one &#8211; your META-D. If your SERP entry is a book then this is everything between the table of contents and index. This is your chance to differentiate yourself from the entries above and below you. This is where your accurate, concise writing beats out black-hat, trick-of-the-week, $150 an hour SEO work. This is the human element that Google wants to understand. Make this count.</p>
<p>5) Make sure your site builds URLs that reflect your accurate and original content that is written for humans. Don&#8217;t bait and switch!</p>
<p>These are my thoughts and ideas on content, which I think should be written for humans rather than bots. I don&#8217;t claim that my ideas are right, but I do believe they point toward the natural and accurate way to develop and display content to visitors &#8211; and that&#8217;s what I think Google likes. I hope you&#8217;re able to make sense of my position and suggestions and put them to good use for your client or on your own site.</p>
]]></content:encoded>
			<wfw:commentRss>http://deanp.net/2012/02/meta-descriptions-arent-dead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Lewt.com is Going to Lose Money to Me</title>
		<link>http://deanp.net/2011/11/why-lewt-com-is-going-to-lose-money-to-me/</link>
		<comments>http://deanp.net/2011/11/why-lewt-com-is-going-to-lose-money-to-me/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 19:08:31 +0000</pubDate>
		<dc:creator>Dean P.</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Miscellanea]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://deanp.net/?p=418</guid>
		<description><![CDATA[I've said before that I'm passionate about customer service and doing business the right way, but I'm also passionate about video games.  These hobbies of mine recently intertwined in a way that very much upset me.  So I thought I would share this story about why Lewt.com is going to lose money to me.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve said before that I&#8217;m passionate about customer service and doing business the right way, but I&#8217;m also passionate about video games.  Shocking, I know.  Imagine me pecking at e-commerce sites all day, and slaying monsters all night.  My brother and I grew up nerding-out on the <a href="http://en.wikipedia.org/wiki/Nintendo_Entertainment_System" target="_new">NES</a>, huddled around a 10-inch TV.  He ended up becoming a rising star game designer with <a href="http://www.bioware.com">BioWare</a>, and I ended up writing about him.</p>
<p>These hobbies of mine recently intertwined in a way that very much upset me.  So I thought I would share this story for two reasons: 1) so you can once again learn something more about the right and wrong way to go about serving customers and doing business online, and 2) to follow through on the promise I made to <a href="http://www.lewt.com" target="_new">Lewt.com</a> to publicly scorn them for their deceptive, scam-like, screw-you business practices.</p>
<h3>But first, some background</h3>
<p>E-commerce is e-commerce, whether you&#8217;re selling car parts, pet food, digital music downloads, or food baskets, the core principles, best practices, and rules are all the same.  Lewt.com is a site that sells digital items from the computer game <a href="http://en.wikipedia.org/wiki/Diablo_II" target="_new">Diablo II (D2)</a>.  So, if your game character needs a new sword or shield, you can buy those things from Lewt, and they will deliver the items to you in the game.  Pretty neat, yes?  It&#8217;s easy money for sellers like Lewt, and it keeps the game fresh and fun for the players.</p>
<p>Because these digital items are hard to track and trace, the seller has to maintain a solid record of honesty and trustworthiness or they risk taking a hit to their reputation &#8211; and in this sort of marketplace, reputation is all you have to go on.  Unfortunately, the folks at Lewt have decided that it&#8217;s more important to stonewall customers than it is to treat them right.</p>
<h3>Lewt.com asks for photo ID on an e-commerce transaction. Really.</h3>
<p>I ordered some gear from Lewt the other day and paid with <a href="http://www.paypal.com" target="_new">PayPal</a>.  This was my 4th order with them in 7 days, so I&#8217;ve already established smooth and legitimate order history at this point.  Before they filled my first order, they called me and asked me a series of questions (one of which being my date of birth, which I refused to provide).  This was their version of a fraud screening, which has no applicable real-world effect other than to ease their mind.  I was glad that I didn&#8217;t have to go through that again on transactions 2 and 3.  But after my most recent transaction, I received the following e-mail:</p>
<div id="attachment_420" class="wp-caption aligncenter" style="width: 468px"><img class="size-full wp-image-420" title="lewt-ask-for-photo-id" src="http://deanp.net/wp-content/uploads/2011/11/lewt-ask-for-photo-id.jpg" alt="Lewt.com asks for a photo ID" width="458" height="446" /><p class="wp-caption-text">Lewt.com asks for a photo ID</p></div>
<blockquote><p>Please send a scan or picture of a valid photo ID to verify@lewt.com. Your name, date of birth, photo, and address (if present on the ID) must be clearly visible in the file sent. &#8211; Lewt.com</p></blockquote>
<h3>&#8220;We do not offer refunds&#8230;&#8221;</h3>
<p>As an e-commerce specialist and do-business-the-right-way enthusiast, I was alarmed and put off by this.  I wrote back to refuse their request and asked that my order be canceled and my payment refunded.  Imagine my surprise when they informed me that they <em>&#8220;do not offer refunds on orders that require verification.&#8221;</em></p>
<p>Oh really?</p>
<p>We exchanged a couple more e-mails which consisted of Lewt stonewalling me and referring to their terms of service.  It ended with the following e-mail from me:</p>
<div id="attachment_426" class="wp-caption aligncenter" style="width: 486px"><img class="size-full wp-image-426" title="lewt-bad-business" src="http://deanp.net/wp-content/uploads/2011/11/lewt-bad-business2.jpg" alt="Lewt.com doesn't understand customer service" width="476" height="423" /><p class="wp-caption-text">Lewt.com doesn&#39;t understand customer service</p></div>
<blockquote><p>What would have cost you nothing is now going to cost you&#8230; a lot of time and frustration.  Additionally, I&#8217;ll be publicly letting people&#8230; on <a href="http://twitter.com/lewt" target="_new">Twitter</a> and <a href="https://www.facebook.com/buylewt" target="_new">Facebook</a> know that you ask for personally identifiable information. -Dean P.</p></blockquote>
<h3>What Lewt.com did wrong</h3>
<h4>No Stated Return Policy</h4>
<p>Remember <a href="http://deanp.net/2011/07/tips-for-a-solid-return-policy/">what I said about having a solid return policy</a>?  Lewt doesn&#8217;t do any of that.  Instead, they&#8217;ve spread segmented refund-related statements throughout their terms of service.</p>
<p>Return policy, terms of service, and privacy policy are three separate concepts, and must be stated separately. <em>&#8220;We do not offer refunds&#8221;</em> is not a return policy.</p>
<h4>Stonewalling Instead of Support</h4>
<p>Having a &#8220;Support&#8221; link in your navigation and a &#8220;Live Chat&#8221; button on your sidebar does not constitute customer support / service.  To truly assist your customers, you must be able to see and understand the buying process from their point of view, be accepting and gracious when presented with their misunderstandings, and be willing to do the right thing &#8211; regardless of what your policies indicate.</p>
<p>Instead of saying, &#8220;We understand that you would be uncomfortable sending us a copy of your license&#8230; here&#8217;s your money back,&#8221; the response was, effectively &#8220;tough luck, champ.&#8221;</p>
<div id="attachment_431" class="wp-caption aligncenter" style="width: 468px"><img class="size-full wp-image-431" title="lewt-tough-luck" src="http://deanp.net/wp-content/uploads/2011/11/lewt-tough-luck.jpg" alt="" width="458" height="271" /><p class="wp-caption-text">Actually, I didn&#39;t agree to your make-believe terms.</p></div>
<h4>Asking for Photo ID</h4>
<p>Last and by no means least, Lewt asked me for a copy of my photo ID for an e-commerce transaction &#8211; a transaction which passed through PayPal, on which I&#8217;m completely vetted and confirmed.  They&#8217;re so out of touch with reality that they very specifically, without mincing words, ask for visual proof of my &#8220;name, date of birth, photo, and address&#8221; without flinching.</p>
<p>Even if I did send them a photo ID, it does nothing to verify the transaction.  I could steal someone&#8217;s wallet, send out copies of their photo ID, and bring peace of mind to businesses that are stupid enough to ask for it.</p>
<p>Obviously, a false sense of security is not worth chasing / pissing off returning customers.</p>
<h3>Awaiting my refund</h3>
<p>I&#8217;ve been doing e-commerce long enough to be able to tell the difference between being emotionally involved in a dispute, and actually being right.  Everyone thinks they&#8217;re right in an argument &#8211; that&#8217;s the point of arguing.  But in this case, I am clearly correct in my assessment of Lewt&#8217;s policies and failures.</p>
<p>Rather than give Lewt 30 days to play with my money, I escalated my PayPal dispute to &#8220;claim&#8221; status, which has a 10-day resolution period.  This means that Lewt is going to have to either come up with some compelling reason to keep my payment or hypnotize the PayPal case representative (who already laughed in dismay over Lewt&#8217;s behavior on the phone with me ) into some largely counter-intuitive action.</p>
<p>Let&#8217;s see if Lewt.com has what it takes to <a href="http://deanp.net/2011/08/publicly-handling-customer-complaints/">handle public customer complaints</a> the right way.</p>
<h3>Related Posts</h3>
<p><a href="http://deanp.net/2011/07/tips-for-a-solid-return-policy/">Tips for a Solid Return Policy:</a>  <em>&#8220;If I buy a product from you, never open it or damage it, return it to you, and get charged a 15% – 20% restocking fee, not only will I never buy from you again, but I’ll invest the money you’ve taken from me in destroying your name on the web.&#8221; &#8211; Dean</em></p>
]]></content:encoded>
			<wfw:commentRss>http://deanp.net/2011/11/why-lewt-com-is-going-to-lose-money-to-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

