|
|
Line 1: |
Line 1: |
| | | |
− |
| |
− | addOnloadHook(createToggleLinks);
| |
− |
| |
− | function createToggleLinks() {
| |
− |
| |
− | var stateArray = new Array();
| |
− | var allObjects = document.getElementsByTagName('span');
| |
− | var rCollapsingObject = new RegExp("^co;(.+?);(.+?);(.+?);(.+?)(;(.+?))?$");
| |
− |
| |
− | for ( var i = 0; i < allObjects.length; i++ ) {
| |
− |
| |
− | if ( rCollapsingObject.test(allObjects[i].className) ) {
| |
− |
| |
− | var collapsingInformation = rCollapsingObject.exec(allObjects[i].className);
| |
− |
| |
− | var collapseText = collapsingInformation[1];
| |
− | var expandText = collapsingInformation[2];
| |
− | var initialState = collapsingInformation[3];
| |
− | var targetClass = collapsingInformation[4];
| |
− | var linkColor = collapsingInformation[6];
| |
− |
| |
− | var toggleLink = document.createElement("a");
| |
− |
| |
− | if ( initialState == "0" ) {
| |
− |
| |
− | toggleLink.appendChild(document.createTextNode(expandText));
| |
− | stateArray[targetClass] = "none";
| |
− | }
| |
− |
| |
− | else {
| |
− |
| |
− | toggleLink.appendChild(document.createTextNode(collapseText));
| |
− | stateArray[targetClass] = "inline";
| |
− | }
| |
− |
| |
− | toggleLink.setAttribute("href", "javascript:toggleCollapse('" + targetClass + "','" + collapseText + "','" + expandText + "')");
| |
− |
| |
− | if ( linkColor != undefined && linkColor != "undefined" && linkColor != "" )
| |
− | toggleLink.style.color = linkColor;
| |
− |
| |
− | allObjects[i].innerHTML = "";
| |
− | allObjects[i].appendChild(toggleLink);
| |
− | }
| |
− |
| |
− | else if ( allObjects[i].className == "morphMaster" ) {
| |
− |
| |
− | var spanID = allObjects[i].getAttribute("id");
| |
− | var targetID = spanID.substr(0, spanID.length - 6);
| |
− | var counter = 1;
| |
− |
| |
− | // Create forward and backward paging if the paging elements exist
| |
− | if ( returnObjById(targetID + "LinkNext") && returnObjById(targetID + "LinkPrev") && returnObjById(targetID + "Content1") ) {
| |
− |
| |
− | // Create the forward link
| |
− | var nextLink = document.createElement("a");
| |
− | nextLink.appendChild(document.createTextNode(returnObjById(targetID + "LinkNext").innerHTML));
| |
− | nextLink.setAttribute("href", "javascript:morphForward('" + targetID + "')");
| |
− |
| |
− | returnObjById(targetID + "LinkNext").innerHTML = "";
| |
− | returnObjById(targetID + "LinkNext").appendChild(nextLink, 0);
| |
− |
| |
− | // Create the backward link
| |
− | var prevLink = document.createElement("a");
| |
− | prevLink.appendChild(document.createTextNode(returnObjById(targetID + "LinkPrev").innerHTML));
| |
− | prevLink.setAttribute("href", "javascript:morphBackward('" + targetID + "')");
| |
− |
| |
− | returnObjById(targetID + "LinkPrev").innerHTML = "";
| |
− | returnObjById(targetID + "LinkPrev").appendChild(prevLink, 0);
| |
− |
| |
− | // Initialize content panes
| |
− | while ( returnObjById(targetID + "Content" + counter) ) {
| |
− |
| |
− |
| |
− | counter++;
| |
− | }
| |
− | }
| |
− |
| |
− | // shobiz addition - figure out initial selection
| |
− | var initialSelection = parseInt(allObjects[i].innerHTML);
| |
− | if (!(initialSelection && returnObjById(targetID + "Link" + initialSelection) && returnObjById(targetID + "Content" + initialSelection))) {
| |
− | allObjects[i].innerHTML = initialSelection = 1;
| |
− | }
| |
− | // end of shobiz addition
| |
− |
| |
− | counter = 1;
| |
− |
| |
− | // Whether or not there is paging, generate normal links
| |
− | while ( returnObjById(targetID + "Link" + counter) && returnObjById(targetID + "Content" + counter) ) {
| |
− |
| |
− | // shobiz addition - bold the initial selection instead of making it into a link
| |
− | var morphLink; // I don't really need to declare it here because javascript only has function locals anyway, but I think this makes my intent clearer
| |
− | if (counter != initialSelection) {
| |
− | morphLink = document.createElement("a");
| |
− | morphLink.appendChild(document.createTextNode(returnObjById(targetID + "Link" + counter).innerHTML));
| |
− | morphLink.setAttribute("href", "javascript:performMorph('" + targetID + "','" + counter + "')");
| |
− | } else {
| |
− | morphLink = document.createElement("strong");
| |
− | morphLink.appendChild(document.createTextNode(returnObjById(targetID + "Link" + counter).innerHTML));
| |
− | }
| |
− | // end of shobiz addition
| |
− |
| |
− | returnObjById(targetID + "Link" + counter).innerHTML = "";
| |
− | returnObjById(targetID + "Link" + counter).appendChild(morphLink);
| |
− |
| |
− | // Initialize content panes
| |
− |
| |
− | counter++;
| |
− | }
| |
− |
| |
− | // shobiz removal - redundant now: allObjects[i].innerHTML = 1;
| |
− | allObjects[i].style.display = "none";
| |
− | }
| |
− | }
| |
− |
| |
− | // Set state of appropriate objects
| |
− | allObjects = document.getElementsByTagName('*');
| |
− |
| |
− | for ( var i = 0; i < allObjects.length; i++ ) {
| |
− |
| |
− | if ( stateArray[allObjects[i].className] )
| |
− | allObjects[i].style.display = stateArray[allObjects[i].className];
| |
− | }
| |
− | }
| |
− |
| |
− | /* Function that toggles collapsing objects.
| |
− | | |
− |
| |
− | function toggleCollapse(targetClass, collapseText, expandText) {
| |
− |
| |
− | var allObjects = document.getElementsByTagName('*');
| |
− | var rCollapsingObject = new RegExp("^co;(.+?);(.+?);(.+?);" + targetClass + "(;(.+?))?$");
| |
− |
| |
− | var linkType;
| |
− |
| |
− | for ( var i = 0; i < allObjects.length; i++ ) {
| |
− |
| |
− | if ( allObjects[i].className == targetClass ) {
| |
− |
| |
− | if ( allObjects[i].style.display == "none" ) {
| |
− |
| |
− | allObjects[i].style.display = "inline";
| |
− | linkType = "Collapse";
| |
− | }
| |
− |
| |
− | else {
| |
− |
| |
− | allObjects[i].style.display = "none";
| |
− | linkType = "Expand";
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | allObjects = document.getElementsByTagName('span');
| |
− |
| |
− | for ( var i = 0; i < allObjects.length; i++ ) {
| |
− |
| |
− | if ( rCollapsingObject.test(allObjects[i].className) ) {
| |
− |
| |
− | var collapsingInformation = rCollapsingObject.exec(allObjects[i].className);
| |
− |
| |
− | var collapseText = collapsingInformation[1];
| |
− | var expandText = collapsingInformation[2];
| |
− | var linkColor = collapsingInformation[5];
| |
− |
| |
− | var toggleLink = document.createElement("a");
| |
− |
| |
− | if ( linkType == "Expand" )
| |
− |
| |
− | toggleLink.appendChild(document.createTextNode(expandText));
| |
− |
| |
− | else if ( linkType == "Collapse" )
| |
− |
| |
− | toggleLink.appendChild(document.createTextNode(collapseText));
| |
− |
| |
− | toggleLink.setAttribute("href", "javascript:toggleCollapse('" + targetClass + "','" + collapseText + "','" + expandText + "')");
| |
− |
| |
− | if ( linkColor != undefined && linkColor != "undefined" && linkColor != "" )
| |
− | toggleLink.style.color = linkColor;
| |
− |
| |
− | allObjects[i].innerHTML = "";
| |
− | allObjects[i].appendChild(toggleLink);
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | /* Functions that perform the morph operations.
| |
− | | |
− |
| |
− | function performMorph(targetID, targetNumber) {
| |
− |
| |
− | // shobiz addition - restore previous selection's link and get rid of current one's
| |
− | var oldCounter = parseInt(returnObjById(targetID + "Master").innerHTML);
| |
− | var morphLink = document.createElement("a");
| |
− | var oldLink = returnObjById(targetID + "Link" + oldCounter);
| |
− | morphLink.appendChild(document.createTextNode(oldLink.childNodes[0].innerHTML));
| |
− | morphLink.setAttribute("href", "javascript:performMorph('" + targetID + "','" + oldCounter + "')");
| |
− | oldLink.replaceChild(morphLink, oldLink.childNodes[0]);
| |
− |
| |
− | var morphStrong = document.createElement("strong");
| |
− | var newLink = returnObjById(targetID + "Link" + targetNumber);
| |
− | morphStrong.appendChild(document.createTextNode(newLink.childNodes[0].innerHTML));
| |
− | newLink.replaceChild(morphStrong, newLink.childNodes[0]);
| |
− | // end of shobiz addition
| |
− |
| |
− | var counter = 1;
| |
− | while ( returnObjById(targetID + "Content" + counter) ) {
| |
− |
| |
− | if ( counter == targetNumber )
| |
− | returnObjById(targetID + "Content" + counter).style.display = "block";
| |
− | else
| |
− | returnObjById(targetID + "Content" + counter).style.display = "none";
| |
− |
| |
− | counter++;
| |
− | }
| |
− |
| |
− | returnObjById(targetID + "Master").innerHTML = targetNumber;
| |
− | }
| |
− |
| |
− | function morphForward(targetID) {
| |
− |
| |
− | var nextPane = parseInt(returnObjById(targetID + "Master").innerHTML) + 1;
| |
− |
| |
− | if ( returnObjById(targetID + "Content" + nextPane) )
| |
− | performMorph(targetID, nextPane);
| |
− |
| |
− | else
| |
− | performMorph(targetID, "1");
| |
− | }
| |
− |
| |
− | function morphBackward(targetID) {
| |
− |
| |
− | var prevPane = parseInt(returnObjById(targetID + "Master").innerHTML) - 1;
| |
− |
| |
− | if ( prevPane > 0 )
| |
− | performMorph(targetID, prevPane);
| |
− |
| |
− | else {
| |
− |
| |
− | var maxIndex = 1;
| |
− |
| |
− | while ( returnObjById(targetID + "Content" + maxIndex) )
| |
− | maxIndex++;
| |
− |
| |
− | performMorph(targetID, maxIndex - 1);
| |
− | }
| |
− | }
| |
− |
| |
− | /* Function that returns an object by ID for various browsers
| |
− | * Taken from http://www.netlobo.com/javascript_get_element_id.html */
| |
− |
| |
− | function returnObjById( id ) {
| |
− |
| |
− | if (document.getElementById)
| |
− | var returnVar = document.getElementById(id);
| |
− |
| |
− | else if (document.all)
| |
− | var returnVar = document.all[id];
| |
− |
| |
− | else if (document.layers)
| |
− | var returnVar = document.layers[id];
| |
− |
| |
− | return returnVar;
| |
− | }
| |