Hi, I'm trying to create a 3 tabbed panel with a slideshow in each tab. The information will be dynamically generated by my CMS. The problem I'm running into is that the plugin I'm using allows for only one initialized id. So I am initializing <ul id = "theSlides"> and it works in the first tab, but doesn't work in any of the other two. I think this is due to the duplication of ids but I don't know how to get around that. Any ideas? here is my code below: <script>
//Featured Content Glider: By http://www.dynamicdrive.com //Created: Dec 22nd, 07' //Updated (Jan 29th, 08): Added four possible slide directions: "updown", "downup", "leftright", or "rightleft" //Updated (Feb 1st, 08): Changed glide behavior to reverse direction when previous button is clicked //Updated (Feb 12th, 08): Added ability to retrieve gliding contents from an external file using Ajax ("remotecontent" variable added to configuration) var featuredcontentglider={ csszindex: 100, ajaxloadingmsg: '<b>Fetching Content. Please wait...</b>', glide:function(config, showpage, isprev){ var selected=parseInt(showpage) if (selected>=config.$contentdivs.length){ //if no content exists at this index position //alert("No content exists at page "+(selected+1)+"! Loading 1st page instead.") selected=0 } var $target=config.$contentdivs.eq(selected) //Test for toggler not being initialized yet, or user clicks on the currently selected page): if (config.$togglerdiv.attr('lastselected')==null || parseInt(config. $togglerdiv.attr('lastselected'))!=selected){ var $selectedlink=config.$toc.eq(selected) config.$next.attr('loadpage', (selected<config. $contentdivs.length-1)? selected+1+'pg' : 0+'pg') config.$prev.attr('loadpage', (selected==0)? config. $contentdivs.length-1+'pg' : selected-1+'pg') var startpoint=(isprev=="previous")? -config.startpoint : config.startpoint $target.css(config.leftortop, startpoint).css("zIndex", this.csszindex++) //hide content so it's just out of view before animating it var endpoint=(config.leftortop=="left")? {left:0} : {top:0} // animate it into view $target.animate(endpoint, config.speed) config.$toc.removeClass('selected') $selectedlink.addClass('selected') config.$togglerdiv.attr('lastselected', selected+'pg') } }, getremotecontent:function(config){ config.$glider.html(this.ajaxloadingmsg) $.ajax({ url: config.remotecontent, error:function(ajaxrequest){ config.$glider.html('Error fetching content.<br />Server Response: '+ajaxrequest.responseText) }, success:function(content){ config.$glider.html(content) featuredcontentglider.setuptoggler(config) } }) }, aligncontents:function(config){ config.$contentdivs=$("#"+config.gliderid+" ."+config.contentclass) config.$contentdivs.css(config.leftortop, config.startpoint).css ({height: config.$glider.height(), visibility: 'visible'}) //position content divs so they're out of view: }, setuptoggler:function(config){ this.aligncontents(config) config.$togglerdiv.hide() config.$toc.each(function(index){ $(this).attr('pagenumber', index+'pg') if (index > (config.$contentdivs.length-1)) $(this).css({display: 'none'}) //hide redundant "toc" links }) var $nextandprev=$("#"+config.togglerid+" .next, #"+config.togglerid +" .prev") $nextandprev.click(function(event){ //Assign click behavior to 'next' and 'prev' links featuredcontentglider.glide(config, this.getAttribute('loadpage'), this.getAttribute('buttontype')) event.preventDefault() //cancel default link action }) config.$toc.click(function(event){ //Assign click behavior to 'toc' links featuredcontentglider.glide(config, this.getAttribute ('pagenumber')) event.preventDefault() }) config.$togglerdiv.fadeIn(1000, function(){ featuredcontentglider.glide(config, config.selected) if (config.autorotate==true){ //auto rotate contents? config.stepcount=0 //set steps taken config.totalsteps=config. $contentdivs.length*config.autorotateconfig[1] //Total steps limit: num of contents x num of user specified cycles) featuredcontentglider.autorotate(config) } }) config.$togglerdiv.click(function(){ featuredcontentglider.cancelautorotate(config.togglerid) }) }, autorotate:function(config){ var rotatespeed=config.speed+config.autorotateconfig[0] window[config.togglerid+"timer"]=setInterval(function(){ if (config.totalsteps>0 && config.stepcount>=config.totalsteps){ clearInterval(window[config.togglerid+"timer"]) } else{ config.$next.click() config.stepcount++ } }, rotatespeed) }, cancelautorotate:function(togglerid){ if (window[togglerid+"timer"]) clearInterval(window[togglerid+"timer"]) }, getCookie:function(Name){ var re=new RegExp(Name+"=[^;]+", "i") //construct RE to search for target name/value pair if (document.cookie.match(re)) //if cookie found return document.cookie.match(re)[0].split("=")[1] //return its value return null }, setCookie:function(name, value){ document.cookie = name+"="+value }, init:function(config){ $(document).ready(function(){ config.$glider=$("#"+config.gliderid) config.$togglerdiv=$("#"+config.togglerid) config.$toc=config.$togglerdiv.find('.toc') config.$next=config.$togglerdiv.find('.next') config.$prev=config.$togglerdiv.find('.prev') config.$prev.attr('buttontype', 'previous') var selected=(config.persiststate)? featuredcontentglider.getCookie (config.gliderid) : config.selected config.selected=(isNaN(parseInt(selected))) ? config.selected : selected //test for cookie value containing null (1st page load) or "undefined" string config.leftortop=(/up/i.test(config.direction))? "top" : "left" // set which CSS property to manipulate based on "direction" config.heightorwidth=(/up/i.test(config.direction))? config. $glider.height() : config.$glider.width() //Get glider height or width based on "direction" config.startpoint=(/^(left|up)/i.test(config.direction))? - config.heightorwidth : config.heightorwidth //set initial position of contents based on "direction" if (typeof config.remotecontent!="undefined" && config.remotecontent.length>0) featuredcontentglider.getremotecontent(config) else featuredcontentglider.setuptoggler(config) $(window).bind('unload', function(){ //clean up and persist config.$togglerdiv.unbind('click') config.$toc.unbind('click') config.$next.unbind('click') config.$prev.unbind('click') if (config.persiststate) featuredcontentglider.setCookie(config.gliderid, config. $togglerdiv.attr('lastselected')) config=null }) }) } } /* Settings for slideshow */ featuredcontentglider.init({ gliderid: "theSlides", //ID of main glider container gliderid1: "theSlides1", //ID of main glider container gliderid2: "theSlides2", //ID of main glider container gliderclass:"theSlidesClass", //Class of main glider container contentclass: "slidePanel", //Shared CSS class name of each glider content togglerid: "jqsNav", //ID of toggler container remotecontent: "", //Get gliding contents from external file on server? "filename" or "" to disable selected: 0, //Default selected content index (0=1st) persiststate: false, //Remember last content shown within browser session (true/false)? speed: 300, //Glide animation duration (in milliseconds) direction: "leftright", //set direction of glide: "updown", "downup", "leftright", or "rightleft" autorotate: false, //Auto rotate contents (true/false)? autorotateconfig: [3000, 2] //if auto rotate enabled, set [milliseconds_btw_rotations, cycles_before_stopping] }) </script> <div id="tabs" class="tablicious"> <ul> <c:forEach var="headLineTab" items="${headlines}"> <li><a href='#tabs-<c:out value="${headLineTab.key}"/ >'><c:out value="${headLineTab.key}"/></a></li> </c:forEach> </ul> <c:forEach var="headLineTab" items="${headlines}"> <div id='tabs-<c:out value="${headLineTab.key}"/>'> <div id="jqSlideshow"> <ul id="theSlides" class="theSlidesClass"> <c:forEach var="headLine" items="${headLineTab.value}"> <c:set var="image"> <bn:metadata propertyName="image" resultName="headLine" /> </c:set> <li class="slidePanel"> <div class="jqsImg" style="float:left;"> <c:choose> <c:when test="${image != ''}"> <img border="0" src='/CMSPortalWeb/fetch/<c:out value="$ {image}"/>' width="173" height="228" alt="Headline Image"> </c:when> <c:otherwise> </c:otherwise> </c:choose> </div> <div class="caption"> <div class="content"> <h3> <bn:metadata propertyName="title" resultName="headLine" /> </h3> <p> <bn:metadata propertyName="text" resultName="headLine" /> </p> </div> </div> </li> </c:forEach> </ul> <ul id="jqsNav"> <li class="mover prev"><a href="#">Prev</a></li> <c:forEach begin="0" varStatus="index" items="$ {headLineTab.value}" > <li class="toc"><a href="#"><c:out value="${index.count}" /></ a></li> </c:forEach> <li class="mover next"><a href="#">Next</a></li> </ul> </div> </div> </c:forEach> </div>