Widgets = {} Widgets.onPageLoad = function() { Widgets.initRefinementTypeahead(); Widgets.initCarousels(); } /************** Checks for any dynamic widgets on this page ****************/ Widgets.getDynaWidgets = function() { var widgets = Common.getElementsByClassName(document, "*", "widget"); var dynawidgets = new Array(); for (var i=0; i < widgets.length; i++) { if (widgets[i].innerHTML == "") { dynawidgets.push(widgets[i]); } } return dynawidgets; } /*********** Loads the specified widget content using Ajax ****************/ Widgets.loadWidget = function(oWidget) { var navstate = Widgets.loadPreferences(oWidget.id); navstate = Branches.setBranchFilters(navstate); //alert("submitting ajax query: " + navstate); var ajaxData = navstate; var ajaxResponse = jQuery.ajax({ url: SITE_ROOT + "/components/widget_" + oWidget.id + ".jspf", data: ajaxData, dataType: "html", async: false }).responseText; oWidget.innerHTML = ajaxResponse; Widgets.renderPreferences(oWidget.id); Widgets.positionEditButton(oWidget); } /*************** Toggle edit content panel display ******************/ Widgets.togglePreferencesPanel = function(widget) { var oPanel = document.getElementById('panel_' + widget); if (oPanel.style.display == 'block') { Common.hideBlock('panel_' + widget); } else { Common.showBlock('panel_' + widget); Widgets.renderPreferences(widget); } } /**************** Position edit content panel links ***************/ Widgets.positionEditButton = function(oWidget) { var oEdit = document.getElementById("btn_edit_" + oWidget.id); if (oEdit != null) { oEdit.style.top = Common.getAbsoluteY(oWidget)+ 1 + "px"; oEdit.style.left = Common.getAbsoluteX(oWidget) + 270 + "px"; } } Widgets.positionEditButtons = function() { var arrEditElements = Common.getElementsByClassName(document.getElementById("homepage"), "div", "edit-button"); for(var i=0; i < arrEditElements.length; i++) { var editBtnId = arrEditElements[i].id; var widgetId = editBtnId.substring(editBtnId.lastIndexOf("_")+1); var oWidget = document.getElementById(widgetId); var oEdit = document.getElementById(editBtnId); oEdit.style.top = Common.getAbsoluteY(oWidget)+ 1 + "px"; oEdit.style.left = Common.getAbsoluteX(oWidget) + 270 + "px"; } } /***************** User preference functions *****************/ Widgets.renderPreferences = function(widget) { var settings = Common.getCookie("pref_widgets"); if (settings != null) { var arrSettings = settings.split(","); //Loop through all user preferences set for this component/widget for (var i=0; i < arrSettings.length; i++) { var dim = arrSettings[i].split("=")[0]; var value = arrSettings[i].split("=")[1]; var values = null; if (value != null) { values = value.split(" "); } var editSettings = document.getElementById("panel_" + widget); if (editSettings != null) { var inputSettings = editSettings.getElementsByTagName("input"); var listSettings = editSettings.getElementsByTagName("select"); //Loop through all checkbox values for this component/widget for (var u=0; u < inputSettings.length; u++) { var oSetting = inputSettings[u]; if (oSetting.id == dim){ //Loop through any stored user setting values and set them for (var v=0; v < values.length; v++) { if (oSetting.value == values[v]) oSetting.checked = true; } } } //Find any dropdown selections to set for (var u=0; u < listSettings.length; u++) { var oSetting = listSettings[u]; for (var x=0; x < oSetting.options.length; x++) { if (oSetting.options[x].value == values[u]) oSetting.options[x].selected = true; } } } } } } /***************** Load preferences for a widget *****************/ Widgets.loadPreferences = function(widget) { var settings = Common.getCookie("pref_widgets"); //var keyName = (widget.indexOf("_") > -1 ? widget.substring(widget.indexOf("_")+1) : widget); var optionkeys = ""; if (settings != null) { var arrSettings = settings.split(","); //Loop through all user preferences set for this component/widget for (var i=0; i < arrSettings.length; i++) { var name = arrSettings[i].split("=")[0]; var values = arrSettings[i].split("=")[1]; if (name == widget) { if (optionKeys.length > 0) optionKeys += " "; optionkeys += widget + "-" + values.replace(" ", " " + widget + "-"); break; } } } if (optionkeys.length == 0) optionkeys = widget + "-1"; return "Ntt=" + optionkeys; } /****************** Save preferences for a widget *****************/ //== ,=... Widgets.savePreferences = function(widget) { var oWidget = document.getElementById(widget); var editSettings = document.getElementById("edit_" + widget); var inputSettings = editSettings.getElementsByTagName("input"); var listSettings = editSettings.getElementsByTagName("select"); var currWidget = ""; var currSetting = inputSettings[0].id; var currValues = ""; //Loop through all checkbox values for (var i=0; i < inputSettings.length; i++) { var oSetting = inputSettings[i]; if (oSetting.checked) { if (currSetting != oSetting.id && currValues != "") { currWidget += currSetting + "=" + currValues.substring(0,currValues.length-1) + ","; currSetting = oSetting.id; currValues = ""; } currValues += oSetting.value + " "; } } if (currValues != "") currWidget += currSetting + "=" + currValues.substring(0,currValues.length-1) + ","; //Find any dropdown selections for (var i=0; i < listSettings.length; i++) { var oSetting = listSettings[i]; currSetting = oSetting.id; currWidget += currSetting + "=" + oSetting.options[oSetting.selectedIndex].value + ","; } Common.setCookie(widget, currWidget.substring(0,currWidget.length-1), ""); Widgets.loadWidget(oWidget); } /***************** Display selected multi-spotlight content ****************/ Widgets.showMultiSpotlight = function(number) { var i = 1; while (document.getElementById("spotlight-multi-" + i) != null) { document.getElementById("spotlight-multi-" + i).className = "spotlight-multi"; document.getElementById("spotlight-multi-tab-" + i).className = "spotlight-multi-tab"; i=i+1; } document.getElementById("spotlight-multi-" + number).className = "spotlight-multi-selected"; document.getElementById("spotlight-multi-tab-" + number).className = "spotlight-multi-tab-selected"; } /***************** Initialize Refinement typeahead *************************/ var settingsRefinementTypeahead = ""; Widgets.initRefinementTypeahead = function() { var dimensionNames = settingsRefinementTypeahead.split("|"); if (settingsRefinementTypeahead != "" && dimensionNames != null) { for (var d=0; d < dimensionNames.length; d++) { Common.loadAjaxComponent("elem_refinement-typeahead.jspf", "dimensionName=" + dimensionNames[d], "refinement-typeahead-" + dimensionNames[d]); var refinementTypeahead = document.getElementById("refinement-typeahead-" + dimensionNames[d]); var lists = refinementTypeahead.getElementsByTagName("ul"); for (var i = 0; i < lists.length; i++) { var theList = lists[i]; // Only work with those having the class "checklist" if (theList.className.indexOf("checklist") > -1) { var labels = theList.getElementsByTagName("label"); // Assign event handlers to labels within for (var j = 0; j < labels.length; j++) { var theLabel = labels[j]; theLabel.onmouseover = function() { this.className += " hover"; }; theLabel.onmouseout = function() { this.className = this.className.replace(" hover", ""); }; } } } } } } Widgets.updateRefinementTypeahead = function(searchTerm, dimensionName) { searchTerm = searchTerm.toLowerCase(); var refinementTypeahead = document.getElementById("refinement-typeahead-" + dimensionName); if (refinementTypeahead != null) { var lists = refinementTypeahead.getElementsByTagName("ul"); for (var i = 0; i < lists.length; i++) { var theList = lists[i]; // Only work with those having the class "checklist" if (theList.className.indexOf("checklist") > -1) { var theItems = theList.getElementsByTagName("li"); // Show only list items that match the term for (var j = 0; j < theItems.length; j++) { var theLabel = theItems[j].getElementsByTagName("label")[0]; if ((theLabel.getAttribute("title").toLowerCase()).match("^"+searchTerm)==searchTerm) { theItems[j].style.display = 'block'; } else { theItems[j].style.display = 'none'; var chkbox = document.getElementById(theLabel.getAttribute("title")); if (chkbox.name == dimensionName) chkbox.checked = false; } } } } } } Widgets.showRefinements = function(dimId) { var showlink = document.getElementById("select-others-" + dimId); var hidelink = document.getElementById("cancel-others-" + dimId); var clearlink = document.getElementById("clear-" + dimId); var refinements = document.getElementById("refinements-" + dimId); showlink.style.display = "none"; clearlink.style.display = "none"; hidelink.style.display = "block"; refinements.style.display = "block"; } Widgets.hideRefinements = function(dimId) { var showlink = document.getElementById("select-others-" + dimId); var hidelink = document.getElementById("cancel-others-" + dimId); var clearlink = document.getElementById("clear-" + dimId); var refinements = document.getElementById("refinements-" + dimId); showlink.style.display = "block"; clearlink.style.display = "block"; hidelink.style.display = "none"; refinements.style.display = "none"; } Widgets.initCarousels = function() { var carousels = Common.getElementsByClassName(document, "*", "carousel"); if (carousels != null) { for (var i=0; i < carousels.length; i++) { var numVisible = 3; var numCount = document.getElementById(carousels[i].id + "-numVisible"); if (numCount != null) numVisible = numCount.value; var centreDistance = (Math.round(numVisible / 2))-1; // Distance of the "centre" of the carousel from the sides, measured in steps var carousel = new YAHOO.widget.Carousel(carousels[i].id); carousel.set("isCircular",true); carousel.set("numVisible", parseInt(numVisible)); carousel.set("animation", { speed: 0.25 }); carousel.render(); carousel.show(); document.getElementById(carousel.get('id') + '_title').innerHTML = document.getElementById(carousel.get('id') + '_title_' + (carousel.get('firstVisible') != null ? carousel.get('firstVisible') + centreDistance : 1)).innerHTML; eval("carousel_" + carousels[i].id + " = carousel;"); document.getElementById(carousels[i].id).style.display = 'block'; } } } Widgets.scrollCarousel = function(id, dir) { //This is the fix for gaps in circular scrolling var carouselId = "carousel_" + id; var numVisible = 3; var numCount = document.getElementById(id + "-numVisible"); if (numCount != null) numVisible = numCount.value; var centreDistance = (Math.round(numVisible / 2))-1; // Distance of the "centre" of the carousel from the sides, measured in steps var firstVisible = eval(carouselId + '.get("firstVisible");'); var numItems = eval(carouselId + '.get("numItems");'); if (dir == 'forward') { if (firstVisible == numItems - numVisible){ eval(carouselId + '.set("animation", { speed: 0 }); ' + carouselId + '.scrollTo(0); ' + carouselId + '.set("animation", { speed: 0.25 });'); } eval(carouselId + '.scrollForward();'); } else if (dir == 'backward') { if (firstVisible == 0) { eval(carouselId + '.set("animation", { speed: 0 }); ' + carouselId + '.scrollTo(' + (numItems-numVisible) + '); ' + carouselId + '.set("animation", { speed: 0.25 });'); } eval(carouselId + '.scrollBackward();'); } firstVisible = eval(carouselId + '.get("firstVisible");'); document.getElementById(id + "_title").innerHTML = document.getElementById(id + "_title_" + (firstVisible + centreDistance)).innerHTML; }