Free Shipping in Canada over $149!*   All prices are in CAD 

All for Strings Theory Book 1 - Violin

This item is temporarily out of stock, but is available to purchase. Most orders will ship in approximately 10-14 days. If shipping will be longer than 14 days we will contact you with an expected date.
Price: $7.95
Features:

All for Strings Theory Book 1 Violin <body> <p>Theory Workbooks 1 and 2 are correlated with the All for Strings method books and are suitable for classroom or individual use. Each page features exercises and games which encompass music fundamentals introduced in the method books. </p> <p>Students start by learning the piano keyboard to increase their understanding of the intervals. They also work with fingering chart exercises so that basic theory can be immediately applied to their instrument. In addition to drawing clefs, notes, key and time signatures, students learn about musical phrases and begin composing. Puzzles and musical math games are also included.</p> </body> </html> <br /> <!-- The preceding spaces are here because some category display formats will cause the products to cascade to the right when displaying product by category. This is caused by the table below being part of the teaser sentence if you have a blank or very short active-e description. These spaces will trick the teaser sentence into thinking that it has something to display sothat the table does not become part of the teaser sentence. You may need to adjust these spaces if you run into this issue.--> <br /> <span style="FONT-WEIGHT: bold">Table of Contents:</span><br /> <br /> <table borderwidth="0"> <tbody> <tr> <td><span style="FONT-WEIGHT: bold">Catalog:</span></td> <td>84VN</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Publisher:</span></td> <td>Kjos</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Composer:</span></td> <td>Anderson/frost</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Artist:</span></td> <td>{{ATTR_ARTIST}}</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Arranger:</span></td> <td></td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Voicing:</span></td> <td></td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Level:</span></td> <td>Student</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Pages:</span></td> <td>{{ATTR_PAGES}}</td> </tr> </tbody> </table></div> </div> </div> <div class="product-fullsku"><span>SKU:</span>  ae00-6073^84VN</div> <div class="product-manufacturerpartnumber"><span>Manufacturer Part #:</span>  84VN</div> </div> </div> </div><style> .sirvrelated { max-height: 184.5px; width: auto !important; } </style><script> window.dataLayer.push({ ecommerce : null }); window.dataLayer.push({ 'event' : 'view_item_list', 'ecommerce' : { items: [ { 'item_id' : '5553_15255', 'item_name' : 'Focusrite Scarlett 4i4 USB Interface 3rd Generation', 'currency' : 'CAD', 'discount': 0.0000, 'index': 1, 'item_brand' : 'Focusrite', 'item_category' : 'Audio Interfaces & DAW's', 'item_list_id': 'related_products', 'item_list_name': 'all for strings theory book 1 violin', 'item_variant' : 'SCARLETT4I4MK3', 'price' : 339.0000, 'quantity' : 1 } , { 'item_id' : '12327_20770', 'item_name' : 'Yamaha AG06 MK2 Mixer Black', 'currency' : 'CAD', 'discount': 0.0000, 'index': 2, 'item_brand' : 'Yamaha', 'item_category' : 'Audio Interfaces & DAW's', 'item_list_id': 'related_products', 'item_list_name': 'all for strings theory book 1 violin', 'item_variant' : 'Analog Mixers $100 - $200', 'price' : 279.9900, 'quantity' : 1 } , { 'item_id' : '9826_16127', 'item_name' : 'Focusrite Scarlett Solo Studio Recording Pack', 'currency' : 'CAD', 'discount': 100.0000, 'index': 3, 'item_brand' : 'Focusrite', 'item_category' : 'Audio Interfaces & DAW's', 'item_list_id': 'related_products', 'item_list_name': 'all for strings theory book 1 violin', 'item_variant' : '$300 - $500 USB', 'price' : 399.0000, 'quantity' : 1 } , { 'item_id' : '1719_7256', 'item_name' : 'Film Favorites Conductor Book/CD', 'currency' : 'CAD', 'discount': 0.0000, 'index': 4, 'item_brand' : 'Hal Leonard', 'item_category' : 'Film Favourites', 'item_list_id': 'related_products', 'item_list_name': 'all for strings theory book 1 violin', 'item_variant' : 'Paul Lavender 60', 'price' : 39.9500, 'quantity' : 1 } ] } }); </script> <script> /* script.datalayer.xml.config */ var vortx = vortx || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.productImpressions = vortx.dataLayer.productImpressions || []; vortx.dataLayer.productDetails = vortx.dataLayer.productDetails || []; vortx.dataLayer.cartProducts = vortx.dataLayer.cartProducts || []; vortx.dataLayer.cartDetails = vortx.dataLayer.cartDetails || []; vortx.dataLayer.orderDetails = vortx.dataLayer.orderDetails || []; vortx.dataLayer.orderedProducts = vortx.dataLayer.orderedProducts || []; vortx.googleEnhancedEcommerce = vortx.googleEnhancedEcommerce || {}; $(document).ready(function () { }); $(document).ready(function() { var productImpressionsNew = [ { productId : 5553, variantId : "", // N/A for impression page id : "5553", name : "Focusrite Scarlett 4i4 USB Interface 3rd Generation", list : "product", brand : "Focusrite", category : "Audio Interfaces \u0026 DAW\u0027s", variant : "", // N/A price : "", // N/A position : 1 }, { productId : 12327, variantId : "", // N/A for impression page id : "12327", name : "Yamaha AG06 MK2 Mixer Black", list : "product", brand : "Yamaha", category : "Audio Interfaces \u0026 DAW\u0027s", variant : "", // N/A price : "", // N/A position : 2 }, { productId : 12327, variantId : "", // N/A for impression page id : "12327", name : "Yamaha AG06 MK2 Mixer Black", list : "product", brand : "Yamaha", category : "Mixers", variant : "", // N/A price : "", // N/A position : 3 }, { productId : 9826, variantId : "", // N/A for impression page id : "9826", name : "Focusrite Scarlett Solo Studio Recording Pack", list : "product", brand : "Focusrite", category : "Audio Interfaces \u0026 DAW\u0027s", variant : "", // N/A price : "", // N/A position : 4 }, { productId : 9826, variantId : "", // N/A for impression page id : "9826", name : "Focusrite Scarlett Solo Studio Recording Pack", list : "product", brand : "Focusrite", category : "Audio Equipment Deals", variant : "", // N/A price : "", // N/A position : 5 }, { productId : 1719, variantId : "", // N/A for impression page id : "1719", name : "Film Favorites Conductor Book/CD", list : "product", brand : "Hal Leonard", category : "Film Favourites", variant : "", // N/A price : "", // N/A position : 6 } ]; if(vortx.dataLayer.productImpressions.length > 0) { Array.prototype.push.apply(vortx.dataLayer.productImpressions, productImpressionsNew); for(var i = 0; i < vortx.dataLayer.productImpressions.length; i++) { vortx.dataLayer.productImpressions[i].position = i + 1; //if adding to existing array then position needs updating. } } else { vortx.dataLayer.productImpressions = productImpressionsNew; } }); </script> <div class="related-products other-products-wrap"> <h2 class="group-header related-items-header other-products-header">Related Products</h2> <div class="screen-reader-only">4 Total Related Products</div> <p class="related-teaser"> </p> <div role="list"> <div class="row list-unstyled related-item-row"> <div role="listitem" class="col-sm-3 col-sm-12 product-grid-item related-item" itemprop="isSimilarTo" itemscope="" itemtype="https://schema.org/Product"> <div class="grid-item-inner"><span id="RelatedProduct_5553-15255" itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"><meta itemprop="price" content="339"> <meta itemprop="priceCurrency" content="CAD"></span><meta itemprop="gtin13" content="0815301005186"> <meta itemprop="mpn" content="SCARLETT4I4MK3"><span itemprop="width" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="height" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="depth" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="weight" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="kg"></span><link itemprop="itemCondition" href="https://schema.org/NewCondition"> <meta itemprop="sku" content="ae00-4898^SCARLETT4I4MK3"> <meta itemprop="productID" content="5553"><meta itemprop="image" content="https://www.tapestrymusic.com/images/product/large/5553.png" /><span itemprop="manufacturer" itemscope="" itemtype="https://schema.org/Organization"><meta itemprop="name" content="Focusrite"> <meta itemprop="url" content="https://www.tapestrymusic.com/m-730-focusrite.aspx"></span><meta itemprop="name" content="Focusrite Scarlett 4i4 USB Interface 3rd Generation"> <meta itemprop="description" content="Sitting on the desks of more musicians and producers than any other, the Scarlett range of audio interfaces means studio-quality sound for all your instruments – and 4i4 is the interface of more. Capture more of your ever-expanding setup with more inputs, more outputs and more connectivity. <br><br> <li> Four balanced line inputs, for connecting synths or other line-level audio, and four balanced outputs, for monitoring and effects sends. <li> Two of the best performing Scarlett mic preamps the range has ever heard – now with Air – for miking up guitars or recording vocals. <li> Two high headroom instrument inputs, for plugging your guitar or bass straight in <li> Loopback, for grabbing a stereo feed of any combination of hardware inputs and software playback, no cables needed, for simple sampling, streaming or podcasting <br><br>Plug in and produce; all your instruments, all the time. With two 3rd Generation preamps, four line-ins and four balanced outs – for synths, drum machines or looping hardware effects – our most connected bus-powered interface records wherever your instruments are. Spend less time plugging in and more time playing. <br /> <!-- The preceding spaces are here because some category display formats will cause the products to cascade to the right when displaying product by category. This is caused by the table below being part of the teaser sentence if you have a blank or very short active-e description. These spaces will trick the teaser sentence into thinking that it has something to display sothat the table does not become part of the teaser sentence. You may need to adjust these spaces if you run into this issue.--> <br /> <table borderwidth="0"> <tbody> <tr> <td><span style="FONT-WEIGHT: bold">Model:</span></td> <td>SCARLETT4I4MK3</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Manufacturer:</span></td> <td>Focusrite</td> </tr> </tbody> </table>"> <meta itemprop="url" content="https://www.tapestrymusic.com/p-5553-focusrite-scarlett-4i4-usb-interface-3rd-generation.aspx"><a href="/p-5553-focusrite-scarlett-4i4-usb-interface-3rd-generation.aspx" class="related-product-link grid-product-link"><div class="related-item-image-wrap grid-item-image-wrap"><img src="https://tapestrymusic.sirv.com/TapProdImg/large/5553.png?w=200" alt="Focusrite Scarlett 4i4 USB Interface 3rd Generation" class="grid-item-image product-image related-item-image Sirv ImageUrl sirvrelated"></div> <div class="grid-item-name-wrap related-item-name-wrap">Focusrite Scarlett 4i4 USB Interface 3rd Generation</div></a></div> </div> <div role="listitem" class="col-sm-3 col-sm-12 product-grid-item related-item" itemprop="isSimilarTo" itemscope="" itemtype="https://schema.org/Product"> <div class="grid-item-inner"><span id="RelatedProduct_12327-20770" itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"><meta itemprop="price" content="279.99"> <meta itemprop="priceCurrency" content="CAD"></span><meta itemprop="mpn" content="AG06MK2B"><span itemprop="width" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="height" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="depth" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="weight" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="kg"></span><link itemprop="itemCondition" href="https://schema.org/NewCondition"> <meta itemprop="sku" content="ae00-10585^AG06MK2B"> <meta itemprop="productID" content="12327"><meta itemprop="image" content="https://www.tapestrymusic.com/images/product/large/12327.jpg" /><span itemprop="manufacturer" itemscope="" itemtype="https://schema.org/Organization"><meta itemprop="name" content="Yamaha"> <meta itemprop="url" content="https://www.tapestrymusic.com/m-180-yamaha.aspx"></span><meta itemprop="name" content="Yamaha AG06 MK2 Mixer Black"> <meta itemprop="description" content="<b>Multipurpose 6-channel mixer with USB audio interface</b><br><br> <li>High resolution (24-bit192kHz) 2-track audio recording and playback. <li>Flexible LOOPBACK feature - perfect for live recording or webcasting. <li>"D-PRE" studio quality mic preamps with high gain and low noise. <li>Easy control and pro sound with 1-TOUCH COMP/EQ, EFFECT and AMP SIM processing. <li>+48V phantom power on CH1 input for condenser mics and Dl boxes. <li>Hi-Z input for guitars on CH2. <li>iPad (2 or later) connectivity via Apple iPad Camera Connection Kit (requires external USB power supply) <li>USB bus-powered for Mac & PC. Rugged metal chassis. Includes Cubase AI downloadable version. <br.<br> <iframe width="560" height="315" src="https://www.youtube.com/embed/g5N4rqJ87pc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <br /> <!-- The preceding spaces are here because some category display formats will cause the products to cascade to the right when displaying product by category. This is caused by the table below being part of the teaser sentence if you have a blank or very short active-e description. These spaces will trick the teaser sentence into thinking that it has something to display sothat the table does not become part of the teaser sentence. You may need to adjust these spaces if you run into this issue.--> <br /> <table borderwidth="0"> <tbody> <tr> <td><span style="FONT-WEIGHT: bold">Model:</span></td> <td>AG06MK2B</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Manufacturer:</span></td> <td>Yamaha</td> </tr> </tbody> </table>"> <meta itemprop="url" content="https://www.tapestrymusic.com/p-12327-yamaha-ag06-mk2-mixer-black.aspx"><a href="/p-12327-yamaha-ag06-mk2-mixer-black.aspx" class="related-product-link grid-product-link"><div class="related-item-image-wrap grid-item-image-wrap"><img src="https://tapestrymusic.sirv.com/TapProdImg/large/12327.jpg?w=200" alt="Yamaha AG06 MK2 Mixer Black" class="grid-item-image product-image related-item-image Sirv ImageUrl sirvrelated"></div> <div class="grid-item-name-wrap related-item-name-wrap">Yamaha AG06 MK2 Mixer Black</div></a></div> </div> <div class="clearfix visible-xs entity-product-extra-small-clear"></div> <div role="listitem" class="col-sm-3 col-sm-12 product-grid-item related-item" itemprop="isSimilarTo" itemscope="" itemtype="https://schema.org/Product"> <div class="grid-item-inner"><span id="RelatedProduct_9826-16127" itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"><meta itemprop="price" content="299"> <meta itemprop="priceCurrency" content="CAD"></span><meta itemprop="gtin13" content="0815301008477"> <meta itemprop="mpn" content="SSSP"><span itemprop="width" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="height" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="depth" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="weight" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="kg"></span><link itemprop="itemCondition" href="https://schema.org/NewCondition"> <meta itemprop="sku" content="ae00-8114^SSSP"> <meta itemprop="productID" content="9826"><meta itemprop="image" content="https://www.tapestrymusic.com/images/product/large/9826.jpg" /><span itemprop="manufacturer" itemscope="" itemtype="https://schema.org/Organization"><meta itemprop="name" content="Focusrite"> <meta itemprop="url" content="https://www.tapestrymusic.com/m-730-focusrite.aspx"></span><meta itemprop="name" content="Focusrite Scarlett Solo Studio Recording Pack"> <meta itemprop="description" content="<br>You’ve found the simplest way to create incredible recordings of your music. Featuring the smallest USB audio interface we make, mic, headphones and all the cables you need to get started, Scarlett Solo Studio is ready to record every song you’ll ever write. <br> Our simplest Scarlett USB interface, featuring the best performing Scarlett mic preamp the range has ever heard – now with Air <br> CM25 MkIII condenser microphone, for making detailed studio-quality recordings HP60 MkIII professional closed-back headphones, for clear and comfortable audio playback, mixing and monitoring <br> XLR and USB cables in the box, no power supply needed. Unpack, plug in, record <br /> <!-- The preceding spaces are here because some category display formats will cause the products to cascade to the right when displaying product by category. This is caused by the table below being part of the teaser sentence if you have a blank or very short active-e description. These spaces will trick the teaser sentence into thinking that it has something to display sothat the table does not become part of the teaser sentence. You may need to adjust these spaces if you run into this issue.--> <br /> <table borderwidth="0"> <tbody> <tr> <td><span style="FONT-WEIGHT: bold">Model:</span></td> <td>SSSP</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Manufacturer:</span></td> <td>Focusrite</td> </tr> </tbody> </table>"> <meta itemprop="url" content="https://www.tapestrymusic.com/p-9826-focusrite-scarlett-solo-studio-recording-pack.aspx"><a href="/p-9826-focusrite-scarlett-solo-studio-recording-pack.aspx" class="related-product-link grid-product-link"><div class="related-item-image-wrap grid-item-image-wrap"><img src="https://tapestrymusic.sirv.com/TapProdImg/large/9826.jpg?w=200" alt="Focusrite Scarlett Solo Studio Recording Pack" class="grid-item-image product-image related-item-image Sirv ImageUrl sirvrelated"></div> <div class="grid-item-name-wrap related-item-name-wrap">Focusrite Scarlett Solo Studio Recording Pack</div></a></div> </div> <div role="listitem" class="col-sm-3 col-sm-12 product-grid-item related-item" itemprop="isSimilarTo" itemscope="" itemtype="https://schema.org/Product"> <div class="grid-item-inner"><span id="RelatedProduct_1719-7256" itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"><meta itemprop="price" content="39.95"> <meta itemprop="priceCurrency" content="CAD"></span><meta itemprop="gtin13" content="0073999218152"> <meta itemprop="mpn" content="HL00860139"><span itemprop="width" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="9.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="height" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.1"> <meta itemprop="unitText" content="cm"></span><span itemprop="depth" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.00"> <meta itemprop="unitText" content="cm"></span><span itemprop="weight" itemscope="" itemtype="https://schema.org/QuantitativeValue"><meta itemprop="value" content="0.55"> <meta itemprop="unitText" content="kg"></span><link itemprop="itemCondition" href="https://schema.org/NewCondition"> <meta itemprop="sku" content="1001-00860139^HL00860139"> <meta itemprop="productID" content="1719"><meta itemprop="image" content="https://www.tapestrymusic.com/images/product/large/1719.gif" /><span itemprop="manufacturer" itemscope="" itemtype="https://schema.org/Organization"><meta itemprop="name" content="Hal Leonard"> <meta itemprop="url" content="https://www.tapestrymusic.com/m-361-hal-leonard.aspx"></span><meta itemprop="name" content="Film Favorites Conductor Book/CD"> <meta itemprop="description" content="<span style="FONT-WEIGHT: bold"><big>Features:</big></span><br /> <br /> As a follow up to the popular Movie Favorites, this eagerly awaited collection features the hottest movie themes arranged for full band or individual soloists (with optional accompaniment CD). In the student books, each song includes a page for the full band arrangement as well as a separate page for solo use. Includes: Pirates of the Caribbean, Mission: Impossible Theme, My Heart Will Go On, Zorro's Theme, Music from Shrek, May It Be, You'll Be in My Heart, The Rainbow Connection, Also Sprach Zarathustra and Accidentally in Love. <br /> <!-- The preceding spaces are here because some category display formats will cause the products to cascade to the right when displaying product by category. This is caused by the table below being part of the teaser sentence if you have a blank or very short active-e description. These spaces will trick the teaser sentence into thinking that it has something to display sothat the table does not become part of the teaser sentence. You may need to adjust these spaces if you run into this issue.--> <br /> <span style="FONT-WEIGHT: bold">Table of Contents:</span><br /> <br /> <table borderwidth="0"> <tbody> <tr> <td><span style="FONT-WEIGHT: bold">Catalog:</span></td> <td>HL00860139</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Publisher:</span></td> <td>Hal Leonard</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Composer:</span></td> <td></td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Artist:</span></td> <td>{{ATTR_ARTIST}}</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Arranger:</span></td> <td>Paul Lavender</td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Voicing:</span></td> <td></td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Level:</span></td> <td></td> </tr> <tr> <td><span style="FONT-WEIGHT: bold">Pages:</span></td> <td>{{ATTR_PAGES}}</td> </tr> </tbody> </table> <a href="#" onClick="window.open('http://www.halleonard.com/closerLookExternal.jsp?id=00860139','samplepage1','status=yes,scrollbars=yes,resizable=yes,width=800,height=500'); return false"><img src="/images/misc/sample.gif" alt="Sample Pages"></a>"> <meta itemprop="url" content="https://www.tapestrymusic.com/p-1719-film-favorites-conductor-book-cd.aspx"><a href="/p-1719-film-favorites-conductor-book-cd.aspx" class="related-product-link grid-product-link"><div class="related-item-image-wrap grid-item-image-wrap"><img src="https://tapestrymusic.sirv.com/TapProdImg/large/1719.jpg?w=200" alt="Film Favorites Conductor Book/CD" class="grid-item-image product-image related-item-image Sirv ImageUrl sirvrelated"></div> <div class="grid-item-name-wrap related-item-name-wrap">Film Favorites Conductor Book/CD</div></a></div> </div> <div class="clearfix visible-xs entity-product-extra-small-clear"></div> </div> </div> </div></div><section class="home-section product-section reviews"><div class="clear"></div><hr size="1"/><input type="hidden" name="ProductID" value="7756"><input type="hidden" name="CategoryID" value="0"><input type="hidden" name="SectionID" value="0"><input type="hidden" name="ManufacturerID" value="0"><h2 class="group-header rating-header">Customer Reviews</h2><div class="page-row total-rating-row"> <div class="rating-stars-wrap"><img class='ratings-star-0-Empty' src='/Skins/Tapestry1.1b1/images/stare.gif' alt='' /><img class='ratings-star-1-Empty' src='/Skins/Tapestry1.1b1/images/stare.gif' alt='' /><img class='ratings-star-2-Empty' src='/Skins/Tapestry1.1b1/images/stare.gif' alt='' /><img class='ratings-star-3-Empty' src='/Skins/Tapestry1.1b1/images/stare.gif' alt='' /><img class='ratings-star-4-Empty' src='/Skins/Tapestry1.1b1/images/stare.gif' alt='' /><span class="ratings-average-wrap"> (0.00)<span class="screen-reader-only">stars out of 5</span></span> </div> <div class="rating-count-wrap"> <span># of Ratings:</span> 0 </div></div><div class="page-row rating-link-row"><div class="rating-link-wrap"> <span>(Only registered customers can rate)</span></div></div><div id="RateCommentDiv" name="RateCommentDiv" style="position:absolute; left:0px; top:0px; visibility:hidden; z-index:2000; "> <iframe name="RateCommentFrm" id="RateCommentFrm" width="400" height="100" hspace="0" vspace="0" marginheight="0" marginwidth="0" frameborder="0" noresize scrolling="yes" src="/empty.htm"></iframe></div> <script type="text/javascript"> function RateComment(ProductID, MyCustomerID, MyVote, RatersCustomerID) { RateCommentFrm.location = '/ratecomment.aspx?Productid=' + ProductID + '&VotingCustomerID=' + MyCustomerID + '&Vote=' + MyVote + '&RatingCustomerID=' + RatersCustomerID } function RateIt(ProductID) { window.open('/rating?Productid=' + ProductID + '&refresh=no&returnurl=%2fp-7756-all-for-strings-theory-book-1-violin.aspx','ASPDNSF_ML87346','height=550,width=400,top=10,left=20,status=no,toolbar=no,menubar=no,scrollbars=yes,location=no') } </script> </section><script> /* script.datalayer.xml.config */ var vortx = vortx || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.productImpressions = vortx.dataLayer.productImpressions || []; vortx.dataLayer.productDetails = vortx.dataLayer.productDetails || []; vortx.dataLayer.cartProducts = vortx.dataLayer.cartProducts || []; vortx.dataLayer.cartDetails = vortx.dataLayer.cartDetails || []; vortx.dataLayer.orderDetails = vortx.dataLayer.orderDetails || []; vortx.dataLayer.orderedProducts = vortx.dataLayer.orderedProducts || []; vortx.googleEnhancedEcommerce = vortx.googleEnhancedEcommerce || {}; $(document).ready(function () { var variantInfo = $('#variant-info-26422'); var variantPrice = variantInfo.val() != undefined ? $('meta[itemprop=price]', variantInfo).attr("content") //multivariant : $('.price-wrap meta[itemprop=price]').attr("content"); //simple product vortx.dataLayer.productDetails.push( { productId : 7756, variantId : 26422, id : "7756", name : "All for Strings Theory Book 1 - Violin", brand : "Kjos", category : "All For Strings", variant : "Anderson/frost Student 0", productDisplaySku : "", price : variantPrice, isDefault : true, quantity : "", // N/A coupon : "", // N/A position : 1, }); }); </script> </div> <!--End of Xmlpackage 'product.simpleproduct.xml.config' --> <!-- CONTENTS END --> </div> </div> </div> <div class="why-tapestry bg-light-gray"> <div class="container"> <div class="row"> <div class="col-md-4"> <h3 style="margin-top:0;">Why Tapestry Music?</h3> <p>Tapestry Music has been a BC family owned business since 1996.  With 3 locations in White Rock, Vancouver and Victoria, Tapestry offers in store & online shopping, music lessons and repair services. As a music education specialist, Tapestry is respected and recommended by music educators across Canada.</p> </div> <div class="col-md-8"> <div class="row"> <div class="col-md-4"> <div class="guarantee-icon"><em class="fas fa-comments-dollar"></em></div> <div class="wwd-heading"><strong>Best Price</strong> <p>Guarantee</p> </div> <p>Tapestry will match the selling price of any identical product from any Canadian retailer that has that item in-stock, up until 30 days after purchase.</p> </div> <div class="col-md-4"> <div class="guarantee-icon"><em class="fas fa-shipping-fast"></em></div> <div class="wwd-heading"><strong>FREE SHIPPING</strong> <p>On  orders over $149</p> </div> <p>We don't charge shipping or handling on orders over $149 (before tax and shipping calculation). There are a few reasonable exceptions like very large or heavy items as well as shipping to remote areas.</p> </div> <div class="col-md-4"> <div class="guarantee-icon"><em class="fas fa-exchange-alt"></em></div> <div class="wwd-heading"><strong>30-Day</strong> <p>Returns</p> </div> <p>Exchange or return for full refund items purchased within 30 days if in unused new condition and in original packaging.</p> </div> </div> </div> </div> </div> </div> <div class="footer-wrapper"> <div class="container"> <div class="footer-row"> <div class="hours-loc-pos bg-darker-gray"> <h2>Locations & Hours </h2> <div class="row baseline-margin"> <div class="col-md-4"> <h4>White Rock (604) 538-0906</h4> <p>Monday to Friday 9:30 - 5:30PM<br /> Saturdays 10AM - 5PM<br /> Sundays 12PM - 4PM</p> <p><iframe frameborder="0" height="300" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2616.1729115797016!2d-122.80371438431965!3d49.02631827930431!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x5485c37922f01ffd%3A0xa6cc0198c5cbbbe8!2s1335+Johnston+Rd%2C+White+Rock%2C+BC+V4B+3Z3%2C+Canada!5e0!3m2!1sen!2sus!4v1545240206731" width="600" style="border-width: 0px; border-style: initial;"></iframe><br /> </p> </div> <div class="col-md-4"> <h4>Vancouver (604) 736-3036</h4> <p>10 AM to 6 PM Monday to Saturday.</p> <br /> <iframe frameborder="0" height="300" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2603.6793899547265!2d-123.20962948408682!3d49.26352248004873!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x548672e44b8a68cf%3A0xe36153fad7bc7d51!2s4440+W+10th+Ave%2C+Vancouver%2C+BC+V6R+2H9!5e0!3m2!1sen!2sca!4v1556388445442!5m2!1sen!2sca" style="border:0;" width="600"></iframe> </div> <div class="col-md-4"> <h4>Victoria (250) 590-0752</h4> <p>10 AM to 6 PM Monday to Saturday.</p> Closed January 29th to February 3rd<br /> <iframe frameborder="0" height="300" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2647.3373059102914!2d-123.36989692348237!3d48.43086567127743!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x548f7483a233fd57%3A0x6d7662a15da2f693!2s1824%20Government%20St%2C%20Victoria%2C%20BC%20V8T%204N5!5e0!3m2!1sen!2sca!4v1706393289791!5m2!1sen!2sca" style="border:0;" width="600"></iframe> </div> </div> </div> <div style="padding-bottom:2rem;"> <div style="text-align: center;"> <form method="POST" action="https://tapestrymusic.activehosted.com/proc.php" id="_form_14_" class="_form _form_14 _inline-form _inline-style _dark"> <input type="hidden" name="u" value="14" /> <input type="hidden" name="f" value="14" /> <input type="hidden" name="s" /> <input type="hidden" name="c" value="0" /> <input type="hidden" name="m" value="0" /> <input type="hidden" name="act" value="sub" /> <input type="hidden" name="v" value="2" /> <input type="hidden" name="or" value="f7b909eea844a441aeced8dc22234aac" /> <div class="_form-content"> <div class="_form_element _x88839845 _inline-style _clear"> <div class="_html-code"> <p class="h4"> Sign up for our newsletter to get insider deals and new product information. </p> </div> </div> <div class="row"> <div class="col-md-3"> </div> <div class="col-md-6"> <div class="_form_element _x93203614 _inline-style"> <div class="_field-wrapper"> <input class="form-control" type="text" id="fullname" name="fullname" placeholder="Type your name" /> </div> </div> <div class="_form_element _x01792967 _inline-style"> <div class="_field-wrapper"> <input class="form-control" type="text" id="email" name="email" placeholder="Type your email" /> </div> </div> </div> <div class="col-md-3"> </div> </div> <div class="_form_element _x79912005 _inline-style center-block" style="width:300px;"> <label for="ls" class="_form-label"> Please verify your request* </label> <div class="g-recaptcha" data-sitekey="6LcwIw8TAAAAACP1ysM08EhCgzd6q5JAOUR1a0Go"> </div> </div> <div class="_button-wrapper _inline-style"> <button class="btn btn-default" id="_form_14_submit" type="submit"> Submit </button> </div> <div class="_clear-element"> </div> </div> <div class="_form-thank-you" style="display:none;"> </div> </form> </div> <script type="text/javascript"> window.cfields = []; window._show_thank_you = function(id, message, trackcmp_url, email) { var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you'); form.querySelector('._form-content').style.display = 'none'; thank_you.innerHTML = message; thank_you.style.display = 'block'; const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias; var visitorObject = window[vgoAlias]; if (email && typeof visitorObject !== 'undefined') { visitorObject('setEmail', email); visitorObject('update'); } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) { // Site tracking URL to use after inline form submission. _load_script(trackcmp_url); } if (typeof window._form_callback !== 'undefined') window._form_callback(id); }; window._show_error = function(id, message, html) { var form = document.getElementById('_form_' + id + '_'), err = document.createElement('div'), button = form.querySelector('button'), old_error = form.querySelector('._form_error'); if (old_error) old_error.parentNode.removeChild(old_error); err.innerHTML = message; err.className = '_error-inner _form_error _no_arrow'; var wrapper = document.createElement('div'); wrapper.className = '_form-inner'; wrapper.appendChild(err); button.parentNode.insertBefore(wrapper, button); document.querySelector('[id^="_form"][id$="_submit"]').disabled = false; if (html) { var div = document.createElement('div'); div.className = '_error-html'; div.innerHTML = html; err.appendChild(div); } }; window._load_script = function(url, callback) { var head = document.querySelector('head'), script = document.createElement('script'), r = false; script.type = 'text/javascript'; script.charset = 'utf-8'; script.src = url; if (callback) { script.onload = script.onreadystatechange = function() { if (!r && (!this.readyState || this.readyState == 'complete')) { r = true; callback(); } }; } head.appendChild(script); }; (function() { if (window.location.search.search("excludeform") !== -1) return false; var getCookie = function(name) { var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)')); return match ? match[2] : null; } var setCookie = function(name, value) { var now = new Date(); var time = now.getTime(); var expireTime = time + 1000 * 60 * 60 * 24 * 365; now.setTime(expireTime); document.cookie = name + '=' + value + '; expires=' + now + ';path=/'; } var addEvent = function(element, event, func) { if (element.addEventListener) { element.addEventListener(event, func); } else { var oldFunc = element['on' + event]; element['on' + event] = function() { oldFunc.apply(this, arguments); func.apply(this, arguments); }; } } var _removed = false; var form_to_submit = document.getElementById('_form_14_'); var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false; var getUrlParam = function(name) { var regexStr = '[\?&]' + name + '=([^&#]*)'; var results = new RegExp(regexStr, 'i').exec(window.location.href); return results != undefined ? decodeURIComponent(results[1]) : false; }; for (var i = 0; i < allInputs.length; i++) { var regexStr = "field\\[(\\d+)\\]"; var results = new RegExp(regexStr).exec(allInputs[i].name); if (results != undefined) { allInputs[i].dataset.name = window.cfields[results[1]]; } else { allInputs[i].dataset.name = allInputs[i].name; } var fieldVal = getUrlParam(allInputs[i].dataset.name); if (fieldVal) { if (allInputs[i].dataset.autofill === "false") { continue; } if (allInputs[i].type == "radio" || allInputs[i].type == "checkbox") { if (allInputs[i].value == fieldVal) { allInputs[i].checked = true; } } else { allInputs[i].value = fieldVal; } } } var remove_tooltips = function() { for (var i = 0; i < tooltips.length; i++) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); } tooltips = []; }; var remove_tooltip = function(elem) { for (var i = 0; i < tooltips.length; i++) { if (tooltips[i].elem === elem) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); tooltips.splice(i, 1); return; } } }; var create_tooltip = function(elem, text) { var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {}; if (elem.type != 'radio' && elem.type != 'checkbox') { tooltip.className = '_error'; arrow.className = '_error-arrow'; inner.className = '_error-inner'; inner.innerHTML = text; tooltip.appendChild(arrow); tooltip.appendChild(inner); elem.parentNode.appendChild(tooltip); } else { tooltip.className = '_error-inner _no_arrow'; tooltip.innerHTML = text; elem.parentNode.insertBefore(tooltip, elem); new_tooltip.no_arrow = true; } new_tooltip.tip = tooltip; new_tooltip.elem = elem; tooltips.push(new_tooltip); return new_tooltip; }; var resize_tooltip = function(tooltip) { var rect = tooltip.elem.getBoundingClientRect(); var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)); if (scrollPosition < 40) { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below'; } else { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above'; } }; var resize_tooltips = function() { if (_removed) return; for (var i = 0; i < tooltips.length; i++) { if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]); } }; var validate_field = function(elem, remove) { var tooltip = null, value = elem.value, no_error = true; remove ? remove_tooltip(elem) : false; if (elem.type != 'checkbox') elem.className = elem.className.replace(/ ?_has_error ?/g, ''); if (elem.getAttribute('required') !== null) { if (elem.type == 'radio' || (elem.type == 'checkbox' && /any/.test(elem.className))) { var elems = form_to_submit.elements[elem.name]; if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) { no_error = elem.checked; } else { no_error = false; for (var i = 0; i < elems.length; i++) { if (elems[i].checked) no_error = true; } } if (!no_error) { tooltip = create_tooltip(elem, "Please select an option."); } } else if (elem.type =='checkbox') { var elems = form_to_submit.elements[elem.name], found = false, err = []; no_error = true; for (var i = 0; i < elems.length; i++) { if (elems[i].getAttribute('required') === null) continue; if (!found && elems[i] !== elem) return true; found = true; elems[i].className = elems[i].className.replace(/ ?_has_error ?/g, ''); if (!elems[i].checked) { no_error = false; elems[i].className = elems[i].className + ' _has_error'; err.push("Checking %s is required".replace("%s", elems[i].value)); } } if (!no_error) { tooltip = create_tooltip(elem, err.join('<br/>')); } } else if (elem.tagName == 'SELECT') { var selected = true; if (elem.multiple) { selected = false; for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected) { selected = true; break; } } } else { for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected && !elem.options[i].value) { selected = false; } } } if (!selected) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Please select an option."); } } else if (value === undefined || value === null || value === '') { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "This field is required."); } } if (no_error && elem.name == 'email') { if (!value.match(/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid email address."); } } if (no_error && /date_field/.test(elem.className)) { if (!value.match(/^\d\d\d\d-\d\d-\d\d$/)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid date."); } } tooltip ? resize_tooltip(tooltip) : false; return no_error; }; var needs_validate = function(el) { if(el.getAttribute('required') !== null){ return true } if(el.name === 'email' && el.value !== ""){ return true } return false }; var validate_form = function(e) { var err = form_to_submit.querySelector('._form_error'), no_error = true; if (!submitted) { submitted = true; for (var i = 0, len = allInputs.length; i < len; i++) { var input = allInputs[i]; if (needs_validate(input)) { if (input.type == 'text') { addEvent(input, 'blur', function() { this.value = this.value.trim(); validate_field(this, true); }); addEvent(input, 'input', function() { validate_field(this, true); }); } else if (input.type == 'radio' || input.type == 'checkbox') { (function(el) { var radios = form_to_submit.elements[el.name]; for (var i = 0; i < radios.length; i++) { addEvent(radios[i], 'click', function() { validate_field(el, true); }); } })(input); } else if (input.tagName == 'SELECT') { addEvent(input, 'change', function() { validate_field(this, true); }); } else if (input.type == 'textarea'){ addEvent(input, 'input', function() { validate_field(this, true); }); } } } } remove_tooltips(); for (var i = 0, len = allInputs.length; i < len; i++) { var elem = allInputs[i]; if (needs_validate(elem)) { if (elem.tagName.toLowerCase() !== "select") { elem.value = elem.value.trim(); } validate_field(elem) ? true : no_error = false; } } if (!no_error && e) { e.preventDefault(); } resize_tooltips(); return no_error; }; addEvent(window, 'resize', resize_tooltips); addEvent(window, 'scroll', resize_tooltips); window['recaptcha_callback'] = function() { // Get all recaptchas in the DOM (there may be more than one form on the page). var recaptchas = document.getElementsByClassName("g-recaptcha"); for (var i in recaptchas) { // Set the recaptcha element ID, so the recaptcha can be applied to each element. var recaptcha_id = "recaptcha_" + i; recaptchas[i].id = recaptcha_id; var el = document.getElementById(recaptcha_id); if (el != null) { var sitekey = el.getAttribute("data-sitekey"); var stoken = el.getAttribute("data-stoken"); grecaptcha.render(recaptcha_id, {"sitekey":sitekey,"stoken":stoken}); } } }; _load_script("//www.google.com/recaptcha/api.js?onload=recaptcha_callback&render=explicit"); window._old_serialize = null; if (typeof serialize !== 'undefined') window._old_serialize = window.serialize; _load_script("//d3rxaij56vjege.cloudfront.net/form-serialize/0.3/serialize.min.js", function() { window._form_serialize = window.serialize; if (window._old_serialize) window.serialize = window._old_serialize; }); var form_submit = function(e) { e.preventDefault(); if (validate_form()) { // use this trick to get the submit button & disable it using plain javascript document.querySelector('#_form_14_submit').disabled = true; var serialized = _form_serialize(document.getElementById('_form_14_')).replace(/%0A/g, '\\n'); var err = form_to_submit.querySelector('._form_error'); err ? err.parentNode.removeChild(err) : false; _load_script('https://tapestrymusic.activehosted.com/proc.php?' + serialized + '&jsonp=true'); } return false; }; addEvent(form_to_submit, 'submit', form_submit); })(); </script> </div> <div class="footer-menu-wrap"> <ul class="col-sm-12 col-md-3 firstMenu"> <li class="footerHeading">Customer Service</li> <li><a href="/t-contact.aspx" rel="nofollow">Contact Us</a></li> <li><a href="/t-12pointinspection.aspx" rel="nofollow">12 Point Instrument Inspection</a></li> <li><a href="/t-sound-system-rentals.aspx">Sound System Rentals</a></li> <li><a href="/account.aspx" rel="nofollow">Your Account</a></li> <li><a href="/aepostpayment.aspx">Make an Account Payment</a></li> <li><a href="/aemanagecc">Manage Credit Cards</a><br /> </li> </ul> <ul class="col-sm-12 col-md-3"> <li class="footerHeading">Store Policies & Info</li> <li><a href="/t-shipping-policy.aspx" rel="nofollow">Shipping Policy</a></li> <li><a href="/t-refund-policy.aspx" rel="nofollow">Refund Policy</a></li> <li><a href="/t-privacy.aspx" rel="nofollow">Privacy Policy</a></li> <li><a href="/t-termsconditions.aspx" rel="nofollow">Terms & Conditions</a></li> <li><a href="https://www.tapestrymusic.com/images/document/2024rentaltermsconditionsammended.pdf" target="_blank" rel="noopener">Rental Agreement Terms & Conditions</a></li> <li><a href="https://services.tapestrymusic.com/affiliate" target="_self">Affiliate Program</a></li> <li><a href="https://www.tapestrymusic.com/t-financing.aspx">In-Store Financing</a></li> <li><a href="https://www.tapestrymusic.com/t-brandexclusions.aspx">Brand Exclusions</a></li> </ul> <ul class="col-sm-12 col-md-3"> <li class="footerHeading">Helpful Links</li> <li><a href="/t-about.aspx">About Us</a></li> <li><a href="/sitemap.aspx">Site Map</a><br /> </li> </ul> <ul class="col-sm-12 col-md-3"> <li class="footerHeading">Payment Methods</li> <li><div class="payment-methods-wrap"> <div class="cards-accepted"><span id="payment-method-imagespp" class="cardname paypal"></span><span id="payment-method-images5" class=" cardname americanexpress"></span><span id="payment-method-images2" class=" cardname mastercard"></span><span id="payment-method-images1" class=" cardname visa"></span></div> </div></li> <li> <div class="seal-marker"><img alt="Powered by AspDotNetStorefront" src="/skins/tapestry1.1b1/images/seal.png"></div> </li> </ul> <div class="clearfix"> </div> </div> <div class="clearfix"></div> </div> <div class="copyright-row"> <div class="copyright"> © Tapestry Music 2024. All Rights Reserved.   </div> </div> </div> </div> <!-- Minicart modal --> <div class="minicart-wrap"> <div id="minicart-modal" class="modal minicart-modal" data-keyboard="true" tabindex="-1"> <div class="modal-dialog" role="region" aria-label="modal dialog"> <div class="modal-content"> <div class="modal-header"> <a href="#" class="switch-mini-link js-switch-to-miniwish off"> <span aria-hidden="true"> <i class="fa fa-angle-left"></i> </span> View wishlist </a> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true"> <i class="fa fa-times-circle-o"></i> </span> </button> <h2 class="minicart-title modal-title"> Shopping Cart: <span class="minicart-title-count js-cart-title-count">0</span> <span class="minicart-items-label js-cart-count-label"> Items </span> </h2> </div> <div class="modal-body"> <div class="minicart-content-wrap"> <div class="minicart-message-area js-minicart-message-area"> </div> <div class="minicart-contents js-minicart-contents"> <div class="empty-mini-cart-text"> Your shopping cart is currently empty. </div> </div> </div> </div> <div class="modal-footer minicart-footer"> <div class="row"> <div class="col-sm-6 text-left-sm"> <div class="minicart-discount off"> Discounts: <span class="minicart-discount js-minicart-discount"></span> </div> <div class="minicart-total-area"> <div class="minicart-total-wrap"> Total: <span class="minicart-total js-minicart-total">$0.00</span> </div> </div> </div> <div class="col-sm-6"> <div class=""> <button type="button" id="minicart-close-button" class="btn btn-default close-minicart-button">Close</button> <button type="button" id="minicart-checkout-button" class="btn btn-primary minicart-checkout-button" data-return-url="/p-7756-all-for-strings-theory-book-1-violin.aspx">Checkout</button> </div> </div> </div> </div> </div> </div> </div> </div> <!-- Miniwish modal --> <div class="minicart-wrap"> <div id="miniwish-modal" class="modal minicart-modal" data-keyboard="true" tabindex="-1"> <div class="modal-dialog" role="region" aria-label="modal dialog"> <div class="modal-content"> <div class="modal-header"> <a href="#" class="switch-mini-link js-switch-to-minicart off"> <span aria-hidden="true"> <i class="fa fa-angle-left"></i> </span> View cart </a> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true"> <i class="fa fa-times-circle-o"></i> </span> </button> <h2 class="minicart-title modal-title"> Your Wishlist: <span class="minicart-title-count js-wish-title-count">0</span> <span class="minicart-items-label js-wish-count-label"> Items </span> </h2> </div> <div class="modal-body"> <div class="minicart-content-wrap"> <div class="minicart-message-area js-miniwish-message-area"> </div> <div class="minicart-contents js-miniwish-contents"> <div class="empty-mini-cart-text"> Your wish list is currently empty. </div> </div> </div> </div> <div class="modal-footer minicart-footer"> <div class="row"> <div class="col-sm-6 text-left-sm"> <div class="minicart-total-area"> <div class="minicart-total-wrap"> Total: <span class="minicart-total js-miniwish-total">$0.00</span> </div> </div> </div> <div class="col-sm-6"> <button type="button" id="miniwish-close-button" class="btn btn-default close-miniwish-button">Close</button> <button type="submit" data-url="/minicart/movealltocart" id="miniwish-move-all-to-cart" class="btn btn-primary minicart-checkout-button js-wishlist-button off"> Move all to Cart </button> </div> </div> </div> </div> </div> </div> </div> <!-- Minicart and miniwish resources (javascript and overlay html) --> <div class="minicart-loading-overlay js-minicart-loading-overlay off"> <div class="minicart-overlay"></div> <div class="minicart-loading"> <div class="minicart-loading-message js-minicart-loading-message">Loading...</div> <div class="loading-animation loading-style-dark"></div> </div> </div> <script src="/scripts/_skin_bundle_2a59354f3da09b60835d68828d972922?v=kdf-7QzJ_71lvhQgUumLmvqe9ch32Wnp3Kyzz7tJ5GI1"></script> <script type="text/javascript"> adnsf$.minicart.initialize( { minicart_DeleteWaitMessage: "Deleting...", miniwish_MoveSingleMessage: "Moving item to cart.", miniwish_MoveAllMessage: "Moving all items to cart.", minicart_UpdateFailureMessage: "Sorry, there was an error updating your cart.", miniwish_UpdateFailureMessage: "Sorry, there was an error updating your wishlist.", minicart_CountLabel: "Items", minicart_CountLabelSingular: "Item", checkoutUrl: "/shoppingcart.aspx", loginUrl: "/signin.aspx" }); adnsf$.minicart.cartEnabled = true; adnsf$.minicart.wishEnabled = true; adnsf$.minicart.onCheckoutPage = false; </script> <div class="live-chat-wrapper"> <div class="live-chat"> </div> </div> <script type="text/javascript"> window.postalCodeRegexConfiguration = { postalCodeRegexMapUrl: "/country/postalcoderegexmap", }; </script> <script src="/scripts/_skin_bundle_c50fa5dbc88bfdb261874db86b8fe0df?v=JPbPQO6zNxj60BCcCixQwYqNlIf6BoXQwWcDaU_AM-41"></script> <script type="text/javascript"> adnsf$.initializeAddToCartForms( { ajaxAddToCartUrl: "/minicart/ajaxaddtocart", ajaxAddKitToCartUrl: "/minicart/ajaxaddkittocart", addToCartMessage: "Adding to cart", addToWishMessage: "Adding to wishlist", invalidQuatityMessage: "Please enter a valid quantity", addToCartFailureMessage: "Your item was not added to the cart because of an error", addToWishFailureMessage: "Your item was not added to the wishlist because of an error", checkoutUrl: "/shoppingcart.aspx", loginUrl: "/signin.aspx" }); adnsf$.validator.unobtrusive.adapters.addSingleVal('min', 'val'); vortx.browser.detect(); if (vortx.browser.isIE) { vortx.browser.warnOfDeprecation( 'browser-detection-notice', 'It appears that your web browser is a bit old. For a more safe and modern experience, please change or upgrade your web browser.' ); } </script> <script src="https://cdnjs.cloudflare.com/ajax/libs/picturefill/3.0.2/picturefill.min.js" ></script> <script> (function () { var mmapiws = window.__mmapiws = window.__mmapiws || {}; mmapiws.accountId = '993362'; var loadDeviceJs = function () { var element = document.createElement('script'); element.async = true; element.src = 'https://device.maxmind.com/js/device.js'; document.body.appendChild(element); }; if (window.addEventListener) { window.addEventListener('load', loadDeviceJs, false); } else if (window.attachEvent) { window.attachEvent('onload', loadDeviceJs); } })(); </script> <!--Xmlpackage 'script.bodyclose' --> <script type="text/javascript"> var google_tag_params = { ecomm_prodid: '7756-26422--', ecomm_pagetype: 'product', ecomm_totalvalue: 0.00 }; </script><!-- Global site tag (gtag.js) - Google Ads: 1036314350 --> <script async src="https://www.googletagmanager.com/gtag/js?id=AW-1036314350"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'AW-1036314350'); </script><script type="text/javascript"> (function(e,t,o,n,p,r,i){e.visitorGlobalObjectAlias=n;e[e.visitorGlobalObjectAlias]=e[e.visitorGlobalObjectAlias]||function(){(e[e.visitorGlobalObjectAlias].q=e[e.visitorGlobalObjectAlias].q||[]).push(arguments)};e[e.visitorGlobalObjectAlias].l=(new Date).getTime();r=t.createElement("script");r.src=o;r.async=true;i=t.getElementsByTagName("script")[0];i.parentNode.insertBefore(r,i)})(window,document,"https://diffuser-cdn.app-us1.com/diffuser/diffuser.js","vgo"); vgo('setAccount', '89622944'); vgo('setTrackByDefault', true); vgo('setEmail', ''); vgo('process'); </script><script> // Enhanced ecommerce product impressions // Price can be added here but not necessary var vortx = vortx || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.productImpressions = vortx.dataLayer.productImpressions || []; $(document).ready(function() { if(vortx.dataLayer.productImpressions.length > 0) { for(var i = 0; i < vortx.dataLayer.productImpressions.length; i++) { var product = vortx.dataLayer.productImpressions[i]; ga('ec:addImpression', { id : product.id, name : product.name, list : product.list, brand: product.brand, category : product.category, variant : product.variant, position : product.position }); } ga('send', 'pageview'); } }); </script> <script> var vortx = vortx || {}; vortx.googleEnhancedEcommerce = vortx.googleEnhancedEcommerce || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.productImpressions = vortx.dataLayer.productImpressions || []; $(document).ready(function () { //add click event listener for products in a grid. $('a.grid-product-link').click(function (e) { googleEnhancedEcommerceProductClick(e); }); //add click event listener for products in a list. $('a.list-product-link').click(function (e) { googleEnhancedEcommerceProductClick(e); }); //add click event listener for products in a featured items listing. $('a.featured-item-link').click(function (e) { googleEnhancedEcommerceProductClick(e); }); // https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#product-click function googleEnhancedEcommerceProductClick(event) { var productHref = $(event.delegateTarget).attr('href'); //clicking on an image doesn't give you the href. var productId = getProductId(productHref); if(productId == 0) { return true; //if something went wrong do not prevent the href link from working. } if(vortx.dataLayer.productImpressions.length <= 0) { return true; } event.preventDefault(); // stop product click jumping straight to product page. for(var i = 0; i < vortx.dataLayer.productImpressions.length; i++) { if(productId == vortx.dataLayer.productImpressions[i].productId) { var product = vortx.dataLayer.productImpressions[i]; ga('ec:addProduct', { id: product.id, name: product.name, list: product.list, brand: product.brand, category: product.category, variant: product.variant, position: product.position, }); ga('ec:setAction', 'click', { list: vortx.dataLayer.productImpressions[i].list }); // Send click with an event, then send user to product page. // https://developers.google.com/analytics/devguides/collection/analyticsjs/sending-hits#hitcallback ga('send', 'event', 'UX', 'click', vortx.dataLayer.productImpressions[i].list, { hitCallback: createFunctionWithTimeout(function () { document.location = productHref; // send to product page. }) }); break; // stop the for loop when we have one product } } return true; }; function getProductId(productHref) { try { var productId = 0; if(productHref.indexOf('/p-') !== -1) { productId = parseInt(productHref.split('-')[1], 10); } else if(productHref.indexOf('/product') !== -1) { var queryStringSplit = productHref.split('/')[2]; //777?returnurl=foo productId = parseInt(queryStringSplit.split('?')[0], 10); } return productId; } catch(error) { return 0; } }; // to ensure hitCallBack doesn't block product clicks // https://developers.google.com/analytics/devguides/collection/analyticsjs/sending-hits#handling_timeouts function createFunctionWithTimeout(callback, opt_timeout) { var called = false; function fn() { if(!called) { called = true; callback(); } } setTimeout(fn, opt_timeout || 1000); return fn; } }); </script> <script> var vortx = vortx || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.productDetails = vortx.dataLayer.productDetails || []; $(document).ready(function () { if (vortx.dataLayer.productDetails.length > 0) { for (var i = 0; i < vortx.dataLayer.productDetails.length; i++) { var product = vortx.dataLayer.productDetails[i]; if (product.isDefault) { ga('ec:addProduct', { id: product.id, name: product.name, brand: product.brand, category: product.category, variant: product.variant, price: product.price, quantity: '', // N/A coupon: '', // N/A position: product.position, }); ga('ec:setAction', 'detail'); ga('send', 'pageview'); } } } }); </script> <script> var vortx = vortx || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.productDetails = vortx.dataLayer.productDetails || []; $(document).ready(function () { // add the click function to every add-to-cart button $("button[id$='addToCart']").on('click', function () { if (vortx.dataLayer.productDetails.length <= 0) { return; } for (var i = 0; i < vortx.dataLayer.productDetails.length; i++) { var product = vortx.dataLayer.productDetails[i]; var addToCartButtonId = $(this).attr('id'); // do we have the right product? if (addToCartButtonId !== product.productId + '_' + product.variantId + '_addToCart') { continue; } // If they haven't chosen a variant, don't send the AddToCart event. if ($('#variantSelector').length > 0 && $('#variantSelector').val() === '0') { return; } var productQuantity = $('#quantity-' + product.variantId).val(); ga('ec:addProduct', { id: product.productId + '-' + product.variantId, name: product.name, brand: product.brand, category: product.category, variant: product.variant, price: product.price, quantity: productQuantity, }); ga('ec:setAction', 'add'); ga('send', 'event', 'UX', 'click', 'add to cart'); // Send data using an event. } }); }); </script><script> var vortx = vortx || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.cartProducts = vortx.dataLayer.cartProducts || []; $(document).ready(function () { if(vortx.dataLayer.cartProducts.length > 0) { for(var i = 0; i < vortx.dataLayer.cartProducts.length; i++) { var product = vortx.dataLayer.cartProducts[i]; ga('ec:addProduct', { id: product.id, name: product.name, brand: product.brand, category: product.category, variant: product.variant, price : product.price, quantity : product.quantity, coupon : '' // N/A }); } ga('send', 'pageview'); //page view } }); </script> <script> var vortx = vortx || {}; vortx.dataLayer = vortx.dataLayer || {}; vortx.dataLayer.orderedProducts = vortx.dataLayer.orderedProducts || []; vortx.dataLayer.orderDetails = vortx.dataLayer.orderDetails || []; $(document).ready(function () { if(vortx.dataLayer.orderedProducts.length > 0) { for(var i = 0; i < vortx.dataLayer.orderedProducts.length; i++) { var product = vortx.dataLayer.orderedProducts[i]; ga('ec:addProduct', { id: product.id, name: product.name, brand: product.brand, category: product.category, variant: product.variant, price : product.price, quantity : product.quantity, coupon : '' // N/A }); } } // should only be one order. if(vortx.dataLayer.orderDetails.length == 1) { var order = vortx.dataLayer.orderDetails[0]; // Transaction level information is provided via an actionFieldObject. ga('ec:setAction', 'purchase', { id : order.orderNumber, affiliation : order.storeName, revenue : order.orderTotal, tax : order.taxAmount, shipping : order.shippingAmount, coupon : order.promos }); } ga('send', 'pageview'); }); </script> <script> var facebook = facebook || {}; $(document).ready(function() { facebook.variantsViewed = facebook.variantsViewed || []; facebook.variantData = facebook.variantData || {}; facebook.variantsViewed.push(0); if (typeof window.updateVariantInfo !== 'undefined') { window.updateVariantInfo = function() { var updateVariantInfo = window.updateVariantInfo; return function() { updateVariantInfo.apply(this, arguments); var variantId = parseInt(arguments[0]); if($.inArray(variantId, facebook.variantsViewed) === -1) { facebook.variantsViewed.push(variantId); facebook.viewContent(variantId); } }; }(); } facebook.fbqTrack = function(eventName, data) { fbq('track', eventName, { content_name: data.productName, content_ids: data.skus, content_type: 'product', value : data.value, currency: data.currency }); }; facebook.viewContent = function(variantId) { var data = facebook.variantData[variantId]; data.value = data.price; facebook.fbqTrack('ViewContent', data); }; facebook.addToCart = function(event, variantId, quantity, variantSelector) { if(variantSelector.length > 0 && variantSelector.val() === '0') return; var data = facebook.variantData[variantId]; data.value = quantity * data.price; facebook.fbqTrack(event, data); facebook.addUpsells(); }; facebook.addUpsells = function() { $("input[name='Upsell']:checked").each(function(index, value) { var upsell = $(this); var data = { productName: upsell.data("upsellProductName"), skus: [upsell.data("upsellSku")], value: upsell.data("upsellPrice"), currency: upsell.data("upsellCurrency"), }; facebook.fbqTrack('AddToCart', data); }); }; facebook.buttonSetup = function(event, button, variantId) { if(button.length) { button.data("variantId", variantId); button.click(function() { var variantId = $(this).data().variantId; var quantity = parseInt($("#quantity-" + variantId).val()); facebook.addToCart(event, variantId, quantity, $('#variantSelector')); }); } }; }); </script><script> $(document).ready(function() { var variantId = 26422; var price = 7.95; facebook.variantData[variantId] = { productName: "All for Strings Theory Book 1 - Violin", skus: ["ae00-6073^84VN"], price: price, currency: "CAD", }; var addToCartButton = $('#7756_26422_addToCart'); facebook.buttonSetup('AddToCart', addToCartButton, variantId); var addToWishListButton = $('#7756_26422_addToWish'); facebook.buttonSetup('AddToWishlist', addToWishListButton, variantId); if (typeof window.updateVariantInfo !== 'undefined') { var defaultVariantId = '26422'; facebook.viewContent(defaultVariantId); if($.inArray(defaultVariantId, facebook.variantsViewed) === -1) facebook.variantsViewed.push(defaultVariantId); } else { Object.keys(facebook.variantData).forEach(function(variantId , index) { facebook.viewContent(variantId); if($.inArray(variantId, facebook.variantsViewed) === -1) facebook.variantsViewed.push(variantId); }); } }); </script> <script> $(document).ready(function() { $('button#minicart-checkout-button').click(function () { fbq('track', 'InitiateCheckout'); }); $('a#js-header-checkout-link').click(function () { fbq('track', 'InitiateCheckout'); }); }); </script> <!--End of xmlpackage 'script.bodyclose' --> <!--Xmlpackage 'promo-window' --> <script> (function(options) { $(function(){ if (Cookies.get('promoWindow') == 'visited') { return false; } else { setTimeout(function () { $('#promoWindow').fadeIn("fast"); }, options.windowDelay); $(".promoClose").on("click", function(){ $("#promoWindow").remove(); }); Cookies.set('promoWindow', 'visited', { expires: options.cookieExpires }); } }); }) ({ windowDelay: 3000, cookieExpires: 1 }); </script> <!--End of xmlpackage 'promo-window' --> <!-- body close scripts --> <!--Xmlpackage 'shareasale' --> <!--End of xmlpackage 'shareasale' --> <script> // Don Kelley, Apr 2024, for Tapestry Music Ltd. // for the minicart modal popup, which is coded in the compiled backend src, we need to replace the image paths with SIRV paths. // This is a jQuery solution to rewrite the urls, assuming there are icon images of type jpg in the SIRV server for the product ids in the cart: $(document).ready(function () { $('.minicart-item.media').each(function (i, s) { var cartProdID = $(s).find("input[id$='__ProductId']").val(); var cartProdImg = "https://tapestrymusic.sirv.com/TapProdImg/large/" + cartProdID + ".jpg"; $.ajax({ url: cartProdImg + '?info', ajaxImg: cartProdImg, // Capture the current value of 'cartProdImg'. success: function(data){ cartProdImg = this.ajaxImg; // Reinstate the correct value for 'cartProdImg'. $(s).find('img.minicart-item-image').attr("src", cartProdImg + "?w=150"); console.log(data); }, error: function(err){ cartProdImg = "https://tapestrymusic.sirv.com/TapProdImg/nopicture.gif"; $(s).find('img.minicart-item-image').attr("src", cartProdImg); console.error(err); } }) }); }); $(window).bind('load', function() { $('img').each(function() { if( (typeof this.naturalWidth != "undefined" && this.naturalWidth == 0) || this.readyState == 'uninitialized' ) { $(this).attr('src', 'https://tapestrymusic.sirv.com/TapProdImg/nopicture.gif'); } }); }); </script> </body> </html>