// the image path to use, with an {ITEMID} placeholder embedded in it var WOWstrCoverPath = "http://www.syndetics.com/hw7.pl?isbn={ITEMID}/mc.gif&client=crrl&type=hw7"; // the widget's width (in pixels) var WOWiWidgetWidth=400; // the widget's height var WOWiWidgetHeight=210; // the slide speed (larger is faster 1-10) var WOWslidespeed=2; // cycles to pause per title var WOWiPause=100; // max width of visible titles in characters - however, a more precise method is used to ensure title fits onscreen var WOWiTitleMaxShowingLength = 70; // configure S curve - this is really percentages var WOWarraySpeedRamp = new Array(-0.50,-0.37,-0.26,-0.17,-0.10,-0.05,-0.02,-0.01,0,0.01,0.02,0.05,0.10,0.17,0.26,0.37); // bar-separated list of ASIN-or-ISBN/WowbraryURL/Title (no final bar) var WOWstrRawData = "9781439180914|http://www.wowbrary.org/l.aspx?l=1517&c=563690&i=9781439180914&t=Sliding+Into+Home&widget|Sliding Into Home|9781439197516|http://www.wowbrary.org/l.aspx?l=1517&c=563688&i=9781439197516&t=The+Obama+Diaries&widget|The Obama Diaries|9781414339436|http://www.wowbrary.org/l.aspx?l=1517&c=563689&i=9781414339436&t=Coming+Back+Stronger%3a+Unleashing+the+Hidden+Power+of+Adversity&widget|Coming Back Stronger: Unleashing the Hidden Power of Adversity|9780061774157|http://www.wowbrary.org/l.aspx?l=1517&c=563693&i=9780061774157&t=Fifth+Avenue%2c+5+A.M.%3a+Audrey+Hepburn%2c+Breakfast+at+Tiffany%27s%2c+and+the+Dawn+of+the+Modern+Woman&widget|Fifth Avenue, 5 A.M.: Audrey Hepburn, Breakfast at Tiffany\'s, and the Dawn of the Modern Woman|9780061707803|http://www.wowbrary.org/l.aspx?l=1517&c=563632&i=9780061707803&t=Sex+at+Dawn%3a+The+Prehistoric+Origins+of+Modern+Sexuality&widget|Sex at Dawn: The Prehistoric Origins of Modern Sexuality|9780805093384|http://www.wowbrary.org/l.aspx?l=1517&c=563691&i=9780805093384&t=In+a+Heartbeat%3a+Sharing+the+Power+of+Cheerful+Giving&widget|In a Heartbeat: Sharing the Power of Cheerful Giving|9780061288500|http://www.wowbrary.org/l.aspx?l=1517&c=563633&i=9780061288500&t=97+Orchard%3a+An+Edible+History+of+Five+Immigrant+Families+in+One+New+York+Tenement&widget|97 Orchard: An Edible History of Five Immigrant Families in One New York Tenement|9780545060509|http://www.wowbrary.org/l.aspx?l=1517&c=563649&i=9780545060509&t=The+39+Clues%2c+Book+10%3a+Into+the+Gauntlet&widget|The 39 Clues, Book 10: Into the Gauntlet|9781416975861|http://www.wowbrary.org/l.aspx?l=1517&c=563655&i=9781416975861&t=The+Clockwork+Angel+(The+Infernal+Devices%2c+Book+1)&widget|The Clockwork Angel (The Infernal Devices, Book 1)|9780451232618|http://www.wowbrary.org/l.aspx?l=1517&c=563692&i=9780451232618&t=Home+Team%3a+Coaching+the+Saints+and+New+Orleans+Back+to+Life&widget|Home Team: Coaching the Saints and New Orleans Back to Life|9781595143068|http://www.wowbrary.org/l.aspx?l=1517&c=563662&i=9781595143068&t=Last+Sacrifice+(Vampire+Academy%2c+Book+6)&widget|Last Sacrifice (Vampire Academy, Book 6)|9780061687167|http://www.wowbrary.org/l.aspx?l=1517&c=563619&i=9780061687167&t=Hamlet%27s+BlackBerry%3a+A+Practical+Philosophy+for+Building+a+Good+Life+in+the+Digital+Age&widget|Hamlet\'s BlackBerry: A Practical Philosophy for Building a Good Life in the Digital Age|9781594033773|http://www.wowbrary.org/l.aspx?l=1517&c=563188&i=9781594033773&t=The+Grand+Jihad%3a+How+Islam+and+the+Left+Sabotage+America&widget|The Grand Jihad: How Islam and the Left Sabotage America|9780470616345|http://www.wowbrary.org/l.aspx?l=1517&c=563626&i=9780470616345&t=ProBlogger%3a+Secrets+for+Blogging+Your+Way+to+a+Six-Figure+Income&widget|ProBlogger: Secrets for Blogging Your Way to a Six-Figure Income|9780345491848|http://www.wowbrary.org/l.aspx?l=1517&c=563571&i=9780345491848&t=The+War+That+Came+Early%3a+West+and+East&widget|The War That Came Early: West and East|9781419550072|http://www.wowbrary.org/l.aspx?l=1517&c=563641&i=9781419550072&t=Kaplan+ASVAB+2011+Edition&widget|Kaplan ASVAB 2011 Edition|9780470569641|http://www.wowbrary.org/l.aspx?l=1517&c=563606&i=9780470569641&t=Facebook+Marketing%3a+An+Hour+a+Day&widget|Facebook Marketing: An Hour a Day|9781416549727|http://www.wowbrary.org/l.aspx?l=1517&c=563174&i=9781416549727&t=The+UltraMind+Solution%3a+The+Simple+Way+to+Defeat+Depression%2c+Overcome+Anxiety%2c+and+Sharpen+Your+Mind&widget|The UltraMind Solution: The Simple Way to Defeat Depression, Overcome Anxiety, and Sharpen Your Mind|9780470559642|http://www.wowbrary.org/l.aspx?l=1517&c=563176&i=9780470559642&t=Algebra+I+For+Dummies+(For+Dummies+(Math+%26amp%3b+Science))&widget|Algebra I For Dummies (For Dummies (Math & Science))|9780470500231|http://www.wowbrary.org/l.aspx?l=1517&c=563591&i=9780470500231&t=Advanced+Google+AdWords&widget|Advanced Google AdWords"; // gap between each image (use HTML): var WOWimagegap="    " var WOWslidebgcolor="white"; var WOWiMoveDirection = 1; // -1, 0, 1 var WOWarraySlideWidths = new Array(); var WOWstrSlideContents = ""; var WOWarrayRawData = WOWstrRawData.split("|"); for (WOWi = 0; WOWi < WOWarrayRawData.length; WOWi += 3) WOWstrSlideContents += ""; WOWstrSlideContents += ''; var WOWiedom=document.all||document.getElementById; if (WOWiedom) document.write('') var WOWiSlides = 0; var WOWarraySlideCenters = new Array(); var WOWarraySlideTitles = new Array(); var WOWactualwidth; var WOWcross_slide, WOWcross_slide2, WOWns_slide, WOWns_slide2; // this isn't called until all images have loaded function WOWfillup(){ // figure out which images loaded and use just those to create the title array, eliminate gaps in the width array, // recreate WOWstrSlideContents for display, sum the image widths, and count valid slides var iTotalWidths = 0; WOWstrSlideContents = ""; WOWiSlides = 0; var i; for (i = 0; i < WOWarrayRawData.length; i += 3) if (document.getElementById("WOWimage" + i).width > 1) { WOWarraySlideTitles[WOWiSlides] = WOWarrayRawData[i+2], WOWarraySlideWidths[WOWiSlides] = document.getElementById("WOWimage" + i).width; iTotalWidths += WOWarraySlideWidths[WOWiSlides]; WOWstrSlideContents += ""; // +WOWimagegap; WOWiSlides++; } WOWstrSlideContents += ''; // for unclear reasons, sometimes the slides haven't really loaded in yet, so if none have arrived, exit and try again later if (WOWiSlides == 0) { setTimeout("WOWfillup()",100); return; } if (WOWiedom){ WOWcross_slide = document.getElementById? document.getElementById("WOWtest2") : document.all.WOWtest2; WOWcross_slide2 = document.getElementById? document.getElementById("WOWtest3") : document.all.WOWtest3; WOWcross_slide.innerHTML = WOWcross_slide2.innerHTML = WOWstrSlideContents; // bug: Firefox reports wrong .offsetWidth initially (it takes it a bit to calculate it) - so we use a different method // WOWactualwidth = document.all ? WOWcross_slide.offsetWidth : document.getElementById("WOWtest2").offsetWidth; WOWactualwidth = iTotalWidths + 10*WOWiSlides; WOWcross_slide2.style.left = WOWactualwidth + "px"; } else if (document.layers){ WOWns_slide=document.ns_slidemenu.document.ns_slidemenu2; WOWns_slide2=document.ns_slidemenu.document.ns_slidemenu3; WOWns_slide.document.write(WOWstrSlideContents); WOWns_slide.document.close(); WOWactualwidth=WOWns_slide.document.width; WOWns_slide2.left=WOWactualwidth; WOWns_slide2.document.write(WOWstrSlideContents); WOWns_slide2.document.close(); } // alert("WOWactualwidth: " + WOWactualwidth + "; slides: " + WOWiSlides + "; sum of widths: " + iTotalWidths + "; widths: " + strWidths); // alert("try2: WOWactualwidth: " + WOWcross_slide.offsetWidth); // compute the distance between each image (this is slightly off) // var fDistanceBetweenImages = (WOWactualwidth - iTotalWidths)/WOWiSlides; // compute the mid position of each slide var fSpot = 0; var strWidths = ""; var i; for (i = 0; i < WOWiSlides; i++) { WOWarraySlideCenters[i] = Math.round(fSpot + WOWarraySlideWidths[i]/2); fSpot += WOWarraySlideWidths[i] + 10; strWidths += WOWarraySlideWidths[i] + ":" + WOWarraySlideCenters[i] + " "; } // alert(strWidths + ' | ' + WOWiSlides + ' ' + iTotalWidths + ' | ' + WOWarrayRawData.length + ' ' + WOWstrSlideContents); // use timer to start slides moving lefttime=setInterval("WOWmoveSlides()",30); } function WOWAddOnload() { if(window.addEventListener) window.addEventListener('load', WOWfillup, false); else if(window.attachEvent) window.attachEvent('onload', WOWfillup); else window.onload = WOWfillup; } // put self into calling chain WOWAddOnload() // converts a number up to 255 to a two-digit hex representation function WOWtoHex(iValue) { var strHex = "0123456789ABCDEF"; return String(strHex.charAt(Math.floor(iValue / 16))) + String(strHex.charAt(iValue % 16)); } // low level: simply sets slide 1 or 2 so that its iPosition'th part is at the left of the slider area function WOWsetSlide(iSlide, iPosition) { // determine the slide var slide = WOWiedom ? (iSlide == 1 ? WOWcross_slide : WOWcross_slide2) : (iSlide == 1 ? WOWns_slide : WOWns_slide2); // put the new position in if (WOWiedom) slide.style.left = -iPosition + "px"; else slide.left = -iPosition; } // sets the two slides to the indicated position function WOWsetPosition(iPosition) { // the first slide goes at the position WOWsetSlide(1, iPosition); // the second slide goes after it if necessary, or else before WOWsetSlide(2, iPosition + (WOWactualwidth - iPosition >= WOWiWidgetWidth ? WOWactualwidth : -WOWactualwidth)); } // returns the x position associated with the given step, using ramping function WOWStepToX(WOWiStep) { // determine which slides we are between var bBeforeSlide = (WOWiStep % WOWarraySpeedRamp.length) < (WOWarraySpeedRamp.length / 2); var iSlide1 = Math.floor(WOWiStep / WOWarraySpeedRamp.length); var iSlide2 = (bBeforeSlide ? iSlide1 - 1 + WOWiSlides : iSlide1 + 1) % WOWiSlides; // compute the distance between the slides, taking into account that iSlide1 may be before or after iSlide2 AND they may be on opposing ends of the slider var iDistance = Math.min(Math.abs(WOWarraySlideCenters[iSlide1] - WOWarraySlideCenters[iSlide2]), Math.min((WOWarraySlideCenters[iSlide1] - WOWarraySlideCenters[iSlide2] + WOWactualwidth) % WOWactualwidth, (WOWarraySlideCenters[iSlide2] - WOWarraySlideCenters[iSlide1] + WOWactualwidth) % WOWactualwidth)); // return the x position return Math.round(WOWarraySlideCenters[iSlide1] + iDistance*WOWarraySpeedRamp[WOWiStep % WOWarraySpeedRamp.length]); } // returns the slide nearest to the given step - this can be off if a wide slide is near a thin one function WOWStepToSlide(WOWiStep) { // step 0 .. WOWarraySpeedRamp.length - 1 is slide 0, etc. return Math.floor(WOWiStep / WOWarraySpeedRamp.length); } // returns the distance as a percentage to the nearest slide (0 means on top of it and 1 means between slides) - this can be off if a wide slide is near a thin one function WOWDistanceToSlide(WOWiStep) { return Math.abs(WOWarraySpeedRamp[WOWiStep % WOWarraySpeedRamp.length]*2.0); } var WOWiSlideShowing = -1; // this causes the first slide to roll in immediately var WOWbSuspended = false; var WOWiPausing = 0; var WOWiPauseSuppression = 0; // number of next steps to not pause during var WOWiStep = 0; function WOWmoveSlides() { // do nothing if suspended if (WOWbSuspended) return; // reduce pause suppression if it's on if (WOWiPauseSuppression > 0) WOWiPauseSuppression--; // countdown timer for when paused on an image if (WOWiPausing > 0) { WOWiPausing--; return; } // do nothing if not supposed to move if (!WOWiMoveDirection) return; // advance the step var iTotalSteps = WOWiSlides*WOWarraySpeedRamp.length; WOWiStep = (WOWiStep + WOWiMoveDirection + iTotalSteps) % iTotalSteps; // if this puts us at a slide, pause unless pause suppression is in place if (WOWDistanceToSlide(WOWiStep) == 0 && WOWiPauseSuppression == 0) WOWiPausing = WOWiPause; // set the new position WOWsetPosition((WOWStepToX(WOWiStep) - WOWiWidgetWidth/2) % WOWactualwidth); // see if the slide has changed if (WOWStepToSlide(WOWiStep) != WOWiSlideShowing) { // set the new slide WOWiSlideShowing = WOWStepToSlide(WOWiStep); // shorten titles initially var strTitle = WOWarraySlideTitles[WOWiSlideShowing]; while (strTitle.length > WOWiTitleMaxShowingLength) strTitle = strTitle.replace(/ [^ ]*( ...)?$/," ..."); // put the possibly shortened title in place document.getElementById("WOWTitle").innerHTML = strTitle; // if the title is too long, truncate it (20 is used for the height because the type is set at 16 pt below while (document.getElementById("WOWTitle").offsetWidth > WOWiWidgetWidth || document.getElementById("WOWTitle").offsetHeight > 20) document.getElementById("WOWTitle").innerHTML = document.getElementById("WOWTitle").innerHTML.replace(/ [^ ]*( ...)?$/," ..."); } // adjust the title color var iIntensity = Math.round(WOWDistanceToSlide(WOWiStep)*255); document.getElementById("WOWTitle").style.color = "#" + WOWtoHex(iIntensity) + WOWtoHex(iIntensity)+ WOWtoHex(iIntensity); } function WOWsetSpeed(iSpeedNew) { WOWiMoveDirection = iSpeedNew; WOWiPausing = 0; if (iSpeedNew) WOWiPauseSuppression = Math.round(WOWarraySpeedRamp.length/3); } // write out material for the area if (WOWiedom||document.layers){ with (document){ write(''); write('') write('
Weekly Highlights
 
') if (WOWiedom){ write('
') write('
'); // write('
') write('
') write('
') } else if (document.layers){ write('') write(''); // onMouseover="copyspeed=0" onMouseout="copyspeed=WOWslidespeed" write(''); // onMouseover="copyspeed=0" onMouseout="copyspeed=WOWslidespeed" write('') } write('
 
     
') } }