////////// Assumes this is prefixed by flyobjects.js and the inline data ///////////// //////////////////// BEGIN FLYSTYLE - POPUP window /////////////////////////////////// var FS_WINDOW_TYPE = "POPUP"; // Pre-Load Images PlusNormal = new Image(13,13); PlusHover = new Image(13,13); MinusNormal = new Image(13,13); MinusHover = new Image(13,13); PlusSpace = new Image(13,13); DownNormal = new Image(15,14); DownHover = new Image(15,14); UpNormal = new Image(15,14); UpHover = new Image(15,14); PlusNormal.src = 'popup-images/plus.gif'; PlusHover.src = 'popup-images/plus.gif'; MinusNormal.src = 'popup-images/minus.gif'; MinusHover.src = 'popup-images/minus.gif'; PlusSpace.src = 'popup-images/plus-space.gif'; DownNormal.src = 'popup-images/down.gif'; DownHover.src = 'popup-images/down.gif'; UpNormal.src = 'popup-images/up.gif'; UpHover.src = 'popup-images/up.gif'; bpIcon = new Image(21,18); flyIcon = new Image(21,18); bpIcon.src = "popup-images/bp-icon.gif" flyIcon.src = "popup-images/fly-icon.gif"; //get HTML for categories var sections = new Array(); function assemblePopupSectionsHTML() { //divide fscategories based on value of "boosterPackCategory" property //create a sections array, which is an array of indexes in fscategories //e.g. fscategories = (cat1, cat2, cat3, ...) // sections = ((0,1,3), (2,6,4, ...), ...) // grouped by boosterPackCategory var i; var s; for (var cat in fscategories) { if(fscategories[cat].boosterPackCategory) { s = 1; } else { s = 0; } //if a section has been started, add the cat to it if (sections[s]) { i = sections[s].length; sections[s][i] = cat; } //otherwise, create a new section else { sections[s] = new Array(); sections[s][0] = cat; } } var sectionsHTML = ""; var catimg; for (var s in sections) { if (s==1) { catimg = bpIcon.src; } else { catimg = flyIcon.src; } sectionsHTML += assemblePopupCatSectionHTML(sections[s], catimg); } return sectionsHTML; } function assemblePopupCatSectionHTML(catindexes, catimg) { var sectionHTML = ""; var cattopHTML; var cat; for (var i in catindexes) { cat = catindexes[i]; fscategories[cat].initializeDisplayProperties(); if (i == 0) { cattopHTML = ""; } else { cattopHTML = "
"; } cattopHTML += "" + "" + "" + "" + "
"; if (fscategories.length == 1) { cattopHTML += ""; } cattopHTML += ""; if (fscategories.length == 1) { cattopHTML += ""; } cattopHTML += "" + "" + fscategories[cat].name + "" + "" + "" + "
" + ""; var keyHTML = "" + "
" + ""; sectionHTML += cattopHTML + keyHTML; } var catbottomHTML = ""+ ""; sectionHTML += catbottomHTML; return sectionHTML; } //HTML of all keywords under a given category (fscategories[cat]) function assemblePopupKeyListHTML(cat) { var keylistHTML = ""; with (fscategories[cat]) { for (var k in keywords) { keywords[k].initializeDisplayProperties(cat,k); keylistHTML += "" + keywords[k].name + "" + "
"; } } return keylistHTML; } function flyswat_InitializeData(name, value) { } //============================================================== // Popup Display Functions //=============================================================== function Popup_showBrowseLinks() { if (fslinksenviro.isValidLinksSet) { Popup_showValidLinksSet(); } else { Popup_showErrorMessage(); } } function Popup_showErrorMessage() { var errorHTML = "
" + "Unable to connect for one or both of the following reasons:

" + "
    " + "
  1. No internet connection
    " + "Please make sure you are connected to the internet.

    " + "

  2. " + "
  3. Cannot contact our servers
    " + "Please try again in a few moments." + "
  4. " + "
"; document.all.FlyswatLinksTable.innerHTML = assemblePopupTableHTML(errorHTML); } // Display info in popup function Popup_showValidLinksSet() { PutCatOnBottom("GeneralKnowledge"); PutCatOnBottom("Encyclopedia"); PutCatOnBottom("Dictionary"); var fsHTML = ""; //-- Check for Original Link --// if (underlyingLink.length > 0) { var origlink_str = assembleOriginalLinkHTML("Original Link", setGlobalID("ORIGLINK"), underlyingLink, underlyingTarget); fsHTML += origlink_str; } //-- Show Categories --// fsHTML += assemblePopupSectionsHTML(); document.all.FlyswatLinksTable.innerHTML = assemblePopupTableHTML(fsHTML); //-- Expand first category --// if (fscategories.length > 0) { var cat=0; showhideKeyList(cat); } checkScrolling(); } //============================================================== // Popup Scrolling Functions //=============================================================== //adds scrolling if info doesn't fit in popup window var MAX_HEIGHT = screen.height; var isScrolling = 0; function checkScrolling() { var fslinks_height = document.all.fslayoutspan.offsetHeight; if (fslinks_height > MAX_HEIGHT) { isScrolling = 1; document.all.scrollupbuttonspan.style.display = "block"; document.all.scrolldownbuttonspan.style.display = "block"; if (canScrollUp) enableScrollUp(); else disableScrollUp(); if (canScrollDown) enableScrollDown(); else disableScrollDown(); } else if (isScrolling) { isScrolling = 0; stopScroll(); resetMiddleRows(); //need this if user scrolled in the window document.all.scrollupbuttonspan.style.display = "none"; document.all.scrolldownbuttonspan.style.display = "none"; } document.location='flyswat:resizehtml'; } //puts scrolling rows back to starting position function resetMiddleRows() { var numrows = document.all.middlerow.length; if (numrows > 1) { for (var i=0; i 1) distanceScrolled = parseInt(document.all.middlerow[0].style.posTop); else distanceScrolled = parseInt(document.all.middlerow.style.posTop); //only scroll if something is hidden above if (distanceScrolled < 0) return true; else return false; } function canScrollDown() { var numrows = document.all.middlerow.length; var distanceScrolled; if (numrows > 1) distanceScrolled = parseInt(document.all.middlerow[0].style.posTop); else distanceScrolled = parseInt(document.all.middlerow.style.posTop); //only scroll if something is hidden above if (distanceScrolled > (MAX_HEIGHT - parseInt(document.all.fslayoutspan.offsetHeight))) return true; else return false; } function mousedownScrollUp(img) { if (img.src == scrollUpNormal.src) { img.src = scrollUpClick.src; } } function mouseupScrollUp(img) { if (img.src == scrollUpClick.src) { img.src = scrollUpNormal.src; } } function mousedownScrollDown(img) { if (img.src == scrollDownNormal.src) { img.src = scrollDownClick.src; } } function mouseupScrollDown(img) { if (img.src == scrollDownClick.src) { img.src = scrollDownNormal.src; } } function disableScrollUp() { document.images['scrollupbutton'].src = scrollUpDisabled.src; // document.all.scrollupbuttonspan.innerHTML = "\"Scroll"; } function disableScrollDown() { document.images['scrolldownbutton'].src = scrollDownDisabled.src; //document.all.scrolldownbuttonspan.innerHTML = "\"Scroll"; } function enableScrollUp() { document.images['scrollupbutton'].src = scrollUpNormal.src; // document.all.scrollupbuttonspan.innerHTML = "\"Scroll"; } function enableScrollDown() { document.images['scrolldownbutton'].src = scrollDownNormal.src; //document.all.scrolldownbuttonspan.innerHTML = "\"Scroll"; } function scrollUp() { var numrows = document.all.middlerow.length; var distanceScrolled; if (numrows > 1) distanceScrolled = parseInt(document.all.middlerow[0].style.posTop); else distanceScrolled = parseInt(document.all.middlerow.style.posTop); //if can scroll up if (distanceScrolled < 0) { if (numrows > 1) { for (var i=0; i 1) distanceScrolled = parseInt(document.all.middlerow[0].style.posTop); else distanceScrolled = parseInt(document.all.middlerow.style.posTop); //if can scroll down if (distanceScrolled > (MAX_HEIGHT - parseInt(document.all.fslayoutspan.offsetHeight))) { if (numrows > 1) { for (var i=0; i" + "" + "" + ""; return HTML; } //need to preload PopupTopRounded and PopupBottomRounded images, because of weirdness with IE4 var popupBottomHTML = "" + "" + ""; function assemblePopupTableHTML(insideHTML) { var HTML = popupTopHTML + insideHTML + popupBottomHTML; return HTML; } var popupTopHTML = "" + "
" + "
" + "" + "" + "
" + "" + "\"Scroll" + "
" + "" + "\"Scroll" + "
"; //HTML of all link types under a given keyword (fscategories[cat].keywords[k]) function assembleLTListHTML(cat, k) { var ltlistHTML = ""; with (fscategories[cat].keywords[k]) { for (var l in linktypes) { linktypes[l].initializeDisplayProperties(cat,k,l); var statusText = name + " - " + linktypes[l].name; if (linktypes[l].providers.length > 0) statusText += " (provided by " + linktypes[l].providers[0].name + ")"; ltlistHTML += ""; } } return ltlistHTML; } function assembleProviderListHTML(cat, k, l) { var provlistHTML = ""; var statusText; with (fscategories[cat].keywords[k].linktypes[l]) { for (var p in providers) { providers[p].initializeDisplayProperties(cat,k,l,p); statusText = fscategories[cat].keywords[k].name + " - " + fscategories[cat].keywords[k].linktypes[l].name + " (provided by " + providers[p].name + ")"; provlistHTML += ""; } } return provlistHTML; } //============================================================== // Helper Functions //=============================================================== //determine if browser is IE4 var agt=navigator.userAgent.toLowerCase(); var is_major = parseInt(navigator.appVersion); var using_ie4 = ((is_major == 4) && (agt.indexOf("msie 5.")==-1)); //txt must be escaped function setStatusText(txt) { //document.location="flyswat:setStatus(" + txt + ")"; } function clearStatusText() { //document.location="flyswat:setStatus()"; } function hoverCatExpandImg(img) { if (img.src == DownNormal.src) { img.src = DownHover.src; } else if (img.src == UpNormal.src) { img.src = UpHover.src; } } function unhoverCatExpandImg(img) { if (img.src == DownHover.src) { img.src = DownNormal.src; } else if (img.src == UpHover.src) { img.src = UpNormal.src; } } function hoverLTExpandImg(img) { if (img.src == PlusNormal.src) { img.src = PlusHover.src; } else if (img.src == MinusNormal.src) { img.src = MinusHover.src; } } function unhoverLTExpandImg(img) { if (img.src == PlusHover.src) { img.src = PlusNormal.src; } else if (img.src == MinusHover.src) { img.src = MinusNormal.src; } } function assembleFSURL(cat, k, l, p) { with (fscategories[cat].keywords[k]) { var catCode = categoryCode; var ltType = linktypes[l].type; var keyCode = code; var keyMT = mt; var provTag = ""; var bpID = fscategories[cat].bpID; var bpRev = fscategories[cat].bpRev; if (arguments.length == 4) provTag = linktypes[l].providers[p].tag; } var fsurl = fslinksenviro.redURL + "?lt=" + safeEscape(ltType) + "&cc=" + safeEscape(catCode) + "&kc=" + safeEscape(keyCode) + "&pp=" + safeEscape(provTag) + "&r=" + safeEscape(fslinksenviro.requestID) + "&m=" + safeEscape(keyMT) + "&sn=" + safeEscape(fssystemenviro.serialNum) + "&dt=" + safeEscape(fslinksenviro.distTag) + "&bi=" + safeEscape(bpID) + "&br=" + safeEscape(bpRev) + "&bp="; if (fscategories[cat].boosterPackCategory) { fsurl += "1"; } else { fsurl += "0"; } return fsurl; } //------------------------------------------------------------ // function: safeEscape // author: Leo // comments: escape(str, 1) doesn't work!! // And I can't get regex's to work //------------------------------------------------------------ function safeEscape(str) { escaped_str = escape(str); if (escaped_str.indexOf("+") > -1) { var arr = escaped_str.split("+"); escaped_str = arr.join("%2B"); } return escaped_str; } //------------------------------------------------------------ // function: safeEscape2 // author: Mark // comments: Had to implement because Javascript problem // with variable names having '%' char in them // so replacing with '$'. //------------------------------------------------------------ function safeEscape2(str) { var iChar; var iStrLen = str.length; var newStr = ""; for (i = 0; i < iStrLen; i++) { iChar = str.charCodeAt(i); if ((iChar < 48) || ((iChar > 57) && (iChar < 65)) || ((iChar > 90) && (iChar < 97)) || (iChar > 122)) { newStr += "$" + iChar; } else newStr += str.charAt(i); } return newStr; } //------------------------------------------------------------------ // Creates a global list of ID's // A new ID is added for each new category, keyword, linktype, // and provider, as well as at any other time. //------------------------------------------------------------------ var globalIDList = new Array(); function setGlobalID(str) { if (isMemberOf(str, globalIDList)) { var i=1; while (isMemberOf(str + i, globalIDList)) i += 1; str = str + i; } globalIDList[globalIDList.length] = str; return str; } //------------------------------------------------ // returns true if "element" is a member of // "array", otherwise returns false //------------------------------------------------ function isMemberOf(element, array) { for (var i=0; i < array.length; i++) { if (array[i] == element) return true; } return false; } //============================================================== // Show/Hide HTML Functions //=============================================================== var showingProviderList = ""; function showhideProviderList(cat, k, l) { var lt = fscategories[cat].keywords[k].linktypes[l]; //closing an open provider list if (lt.providerListShowing) { lt.hideProviderList(); showingProviderList = ""; } //opening a provider list else { //close the previously opened list if (showingProviderList) showingProviderList.hideProviderList(); lt.showProviderList(cat, k, l); showingProviderList = lt; } if (FS_WINDOW_TYPE == "POPUP") checkScrolling(); } var showingLTList = ""; function showhideLTList(cat, k) { var keyword = fscategories[cat].keywords[k]; //closing an open lt list if (keyword.ltListShowing) { keyword.hideLTList(); if (FS_WINDOW_TYPE != "POPUP") { showingLTList = ""; } } //opening a provider list else { keyword.showLTList(cat, k); if (FS_WINDOW_TYPE != "POPUP") { if (showingLTList) showingLTList.hideLTList(); showingLTList = keyword; } } if (FS_WINDOW_TYPE == "POPUP") checkScrolling(); } var showingKeyList = ""; function showhideKeyList(cat) { var category = fscategories[cat]; if (category.keyListShowing) { category.hideKeyList(); showingKeyList = ""; } else { //close the previously opened list if (showingKeyList) showingKeyList.hideKeyList(); category.showKeyList(cat); showingKeyList = category; } if (FS_WINDOW_TYPE == "POPUP") checkScrolling(); } //----------------------------------------------------------------- // function: PutCatOnBottom // author: Mark // comments: Will take the fscategories array and put the // category with "catcode" at the end of the array. //----------------------------------------------------------------- function PutCatOnBottom(catcode) { bSearchesNotFound = 1; var cat = 0; while ((cat < fscategories.length) && (bSearchesNotFound)) { var catCode = fscategories[cat].keywords[0].categoryCode; var iSearchesIndex = 0; if (catCode == catcode) { var searchCat = fscategories[cat]; bSearchesNotFound = 0; iSearchesIndex = cat; iSearchesIndex++; for (var i = iSearchesIndex; i < fscategories.length; i++) { fscategories[i - 1] = fscategories[i]; } fscategories[fscategories.length - 1] = searchCat; } cat++; } } Flyswat Control Band