source: main/trunk/greenstone3/web/interfaces/default/js/document_scripts.js@ 29173

Last change on this file since 29173 was 29173, checked in by kjdon, 10 years ago

document contnet editing stuff: making the visible metadata set list customizable, keeping the editing controls on the page even when scrolling, splitting the save button into save and rebuild, and allowing user choice over which buttons they have

  • Property svn:executable set to *
File size: 41.6 KB
Line 
1var _imageZoomEnabled = false;
2var _linkCellMap = new Array();
3var _onCells = new Array();
4
5/* some vars for document editing */
6/* if true, will look through all the metadata for the document, and add each namespace into the list of metadata sets. If set to false, will only add in the ones defined in setStaticMetadataSets function (defined below) - override this function to make a custom list of sets */
7var dynamic_metadata_list = true;
8/* if true, will make the editing controls stay visible even on page scrolling */
9var keep_editing_controls_visible = true;
10/* Here you can choose which save buttons you like. Choose from 'save', 'rebuild', 'saveandrebuild' */
11var save_and_rebuild_buttons = ["saveandrebuild"];
12
13/********************
14* EXPANSION SCRIPTS *
15********************/
16
17function getTextForSection(sectionID, callback)
18{
19 if(!callback)
20 {
21 console.log("Cannot get text as the callback function is not defined");
22 }
23
24 var template = "";
25 template += '<xsl:template match="/">';
26 template += '<text>';
27 template += '<xsl:for-each select="/page/pageResponse/document//documentNode[@nodeID = \'' + sectionID + '\']">';
28 template += '<xsl:call-template name="sectionContent"/>';
29 template += '</xsl:for-each>';
30 template += '</text>';
31 template += '</xsl:template>';
32
33 var hlCheckBox = document.getElementById("highlightOption");
34
35 var hl = "";
36 if(hlCheckBox)
37 {
38 if(hlCheckBox.checked)
39 {
40 hl = "on";
41 }
42 else
43 {
44 hl = "off";
45 }
46 }
47
48 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?hl=" + hl + "&p.s=TextQuery&ilt=" + template.replace(" ", "%20");
49
50 $.ajax(url)
51 .success(function(response)
52 {
53 if(response)
54 {
55 var textStart = response.indexOf(">", response.indexOf(">") + 1) + 1;
56 var textEnd = response.lastIndexOf("<");
57
58 if(textStart == 0 || textEnd == -1 || textEnd <= textStart)
59 {
60 callback("");
61 }
62
63 var text = response.substring(textStart, textEnd);
64 callback(text);
65 }
66 else
67 {
68 callback(null);
69 }
70 })
71 .error(function()
72 {
73 callback(null);
74 });
75}
76
77function getSubSectionsForSection(sectionID, callback)
78{
79 if(!callback)
80 {
81 console.log("Cannot get sub sections as the callback function is not defined");
82 }
83
84 var template = "";
85 template += '<xsl:template match="/">';
86 template += '<sections>';
87 template += '<xsl:for-each select="/page/pageResponse/document//documentNode[@nodeID = \'' + sectionID + '\']/documentNode">';
88 template += '<xsl:call-template name="wrapDocumentNodes"/>';
89 template += '</xsl:for-each>';
90 template += '</sections>';
91 template += '</xsl:template>';
92
93 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?ilt=" + template.replace(" ", "%20");
94
95 if(gs.documentMetadata.docType == "paged")
96 {
97 url += "&dt=hierarchy";
98 }
99
100 $.ajax(url)
101 .success(function(response)
102 {
103 if(response)
104 {
105 var sectionsStart = response.indexOf(">", response.indexOf(">") + 1) + 1;
106 var sectionsEnd = response.lastIndexOf("<");
107
108 if(sectionsStart == 0 || sectionsEnd == -1 || sectionsEnd <= sectionsStart)
109 {
110 callback(" ");
111 return;
112 }
113
114 var sections = response.substring(sectionsStart, sectionsEnd);
115 callback(sections);
116 }
117 else
118 {
119 callback(null);
120 }
121 })
122 .error(function()
123 {
124 callback(null);
125 });
126}
127
128function toggleSection(sectionID, callback, tocDisabled)
129{
130 var docElem = gs.jqGet("doc" + sectionID);
131 var tocElem = gs.jqGet("toc" + sectionID);
132
133 var tocToggleElem = gs.jqGet("ttoggle" + sectionID);
134 var docToggleElem = gs.jqGet("dtoggle" + sectionID);
135
136 if(docElem.css("display") == "none")
137 {
138 if(tocToggleElem.length && !tocDisabled)
139 {
140 tocToggleElem.attr("src", gs.imageURLs.collapse);
141 }
142
143 if(tocElem.length && !tocDisabled)
144 {
145 tocElem.css("display", "block");
146 }
147
148 if(docElem.hasClass("noText"))
149 {
150 getTextForSection(sectionID, function(text)
151 {
152 if(text)
153 {
154 var nodeID = sectionID.replace(/\./g, "_");
155 if(text.search("wrap" + nodeID) != -1)
156 {
157 $("#zoomOptions").css("display", "");
158 $("#pagedImageOptions").css("display", "");
159 }
160 getSubSectionsForSection(sectionID, function(sections)
161 {
162 if(sections)
163 {
164 var textElem = gs.jqGet("doc" + sectionID);
165 textElem.html(text + sections);
166
167 docElem.removeClass("noText");
168 docElem.css("display", "block");
169 docToggleElem.attr("src", gs.imageURLs.collapse);
170
171 if(callback)
172 {
173 callback(true);
174 }
175
176 if(gs.jqGet("viewSelection").length)
177 {
178 changeView();
179 }
180 }
181 else
182 {
183 docToggleElem.attr("src", gs.imageURLs.expand);
184 if(callback)
185 {
186 callback(false);
187 }
188 }
189 });
190 }
191 else
192 {
193 docToggleElem.attr("src", gs.imageURLs.expand);
194 if(callback)
195 {
196 callback(false);
197 }
198 }
199 });
200
201 docToggleElem.attr("src", gs.imageURLs.loading);
202 }
203 else
204 {
205 docToggleElem.attr("src", gs.imageURLs.collapse);
206 docElem.css("display", "block");
207
208 if(callback)
209 {
210 callback(true);
211 }
212 }
213 }
214 else
215 {
216 docElem.css("display", "none");
217
218 //Use the page image if this is a leaf node and the chapter image if it not
219 docToggleElem.attr("src", gs.imageURLs.expand);
220
221 if(tocToggleElem.length)
222 {
223 tocToggleElem.attr("src", gs.imageURLs.expand);
224 }
225
226 if(tocElem.length)
227 {
228 tocElem.css("display", "none");
229 }
230
231 if(callback)
232 {
233 callback(true);
234 }
235 }
236}
237
238function scrollToTop()
239{
240 $('html, body').stop().animate({scrollTop: 0}, 1000);
241}
242
243function focusSection(sectionID, level, tocDisabled)
244{
245 if(!level)
246 {
247 level = 0;
248 }
249
250 var parts = sectionID.split(".");
251 if(level >= parts.length)
252 {
253 var topVal = $(document.getElementById("doc" + sectionID)).offset().top - 50;
254 $('html, body').stop().animate({scrollTop: topVal}, 1000);
255 return;
256 }
257
258 var idToExpand = "";
259 for(var i = 0; i < level + 1; i++)
260 {
261 if(i > 0)
262 {
263 idToExpand += ".";
264 }
265
266 idToExpand += parts[i];
267 }
268
269 if(!isExpanded(idToExpand))
270 {
271 toggleSection(idToExpand, function(success)
272 {
273 if(success)
274 {
275 focusSection(sectionID, level + 1, tocDisabled);
276 }
277 }, tocDisabled);
278 }
279 else
280 {
281 focusSection(sectionID, level + 1, tocDisabled);
282 }
283}
284
285function expandOrCollapseAll(expand)
286{
287 var divs = $("div");
288 var startCounter = 0;
289 var endCounter = 0;
290
291 for(var i = 0; i < divs.length; i++)
292 {
293 if($(divs[i]).attr("id") && $(divs[i]).attr("id").search(/^doc/) != -1)
294 {
295 var id = $(divs[i]).attr("id").replace(/^doc(.*)/, "$1");
296 if(isExpanded(id) != expand)
297 {
298 //Don't collapse the top level
299 if(!expand && id.indexOf(".") == -1)
300 {
301 continue;
302 }
303 startCounter++;
304
305 var toggleFunction = function(tid)
306 {
307 toggleSection(tid, function(success)
308 {
309 if(success)
310 {
311 endCounter++;
312 }
313 else
314 {
315 setTimeout(function(){toggleFunction(tid)}, 500);
316 }
317 });
318 }
319 toggleFunction(id);
320 }
321 }
322 }
323
324 if(startCounter != 0)
325 {
326 var checkFunction = function()
327 {
328 if(startCounter == endCounter)
329 {
330 expandOrCollapseAll(expand);
331 }
332 else
333 {
334 setTimeout(checkFunction, 500);
335 }
336 }
337 checkFunction();
338 }
339}
340
341function loadTopLevelPage(callbackFunction, customURL)
342{
343 var url;
344 if(customURL)
345 {
346 url = customURL;
347 }
348 else
349 {
350 url = gs.xsltParams.library_name + "?a=d&c=" + gs.cgiParams.c + "&excerptid=gs-document";
351 if(gs.cgiParams.d && gs.cgiParams.d.length > 0)
352 {
353 url += "&d=" + gs.cgiParams.d.replace(/([^.]*)\..*/, "$1");
354 }
355 else if(gs.cgiParams.href && gs.cgiParams.href.length > 0)
356 {
357 url += "&d=&alb=1&rl=1&href=" + gs.cgiParams.href;
358 }
359 }
360
361 $.ajax(url)
362 .success(function(response)
363 {
364 if(response)
365 {
366 var targetElem = $("#gs-document");
367 var docStart = response.indexOf(">") + 1;
368 var docEnd = response.lastIndexOf("<");
369 var doc = response.substring(docStart, docEnd);
370
371 targetElem.html(doc);
372
373 if(callbackFunction)
374 {
375 callbackFunction();
376 }
377 }
378 })
379 .error(function()
380 {
381 setTimeout(function(){loadTopLevelPage(callbackFunction, customURL);}, 1000);
382 });
383}
384
385function retrieveFullTableOfContents()
386{
387 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "?excerptid=tableOfContents&ed=1";
388 if(gs.cgiParams.d && gs.cgiParams.d.length > 0)
389 {
390 url += "&a=d&d=" + gs.cgiParams.d;
391 }
392 else if(gs.cgiParams.href && gs.cgiParams.href.length > 0)
393 {
394 url += "&a=d&d=&alb=1&rl=1&href=" + gs.cgiParams.href;
395 }
396
397 $.ajax(url)
398 .success(function(newTOCElem)
399 {
400 var tocStart = newTOCElem.indexOf(">") + 1;
401 var tocEnd = newTOCElem.lastIndexOf("<");
402
403 var newTOC = newTOCElem.substring(tocStart, tocEnd);
404
405 //Add the "Expand document"/"Collapse document" links
406 newTOC = "<table style=\"width:100%; text-align:center;\"><tr><td><a href=\"javascript:expandOrCollapseAll(true);\">Expand document</a></td><td><a href=\"javascript:expandOrCollapseAll(false);\">Collapse document</a></td></tr></table>" + newTOC;
407
408 //Collapse the TOC
409 newTOC = newTOC.replace(/display:block/g, "display:none");
410 newTOC = newTOC.replace(/display:none/, "display:block");
411 newTOC = newTOC.replace(/images\/collapse/g, "images/expand");
412
413 var tocElem = $("#tableOfContents");
414 tocElem.html(newTOC);
415
416 gs.variables.tocLoaded = true;
417 })
418 .error(function()
419 {
420 setTimeout(retrieveFullTableOfContents, 1000);
421 });
422}
423
424function isExpanded(sectionID)
425{
426 var docElem = gs.jqGet("doc" + sectionID);
427 if(docElem.css("display") == "block")
428 {
429 return true;
430 }
431 return false;
432}
433
434function minimizeSidebar()
435{
436 var toc = $("#contentsArea");
437 var maxLink = $("#sidebarMaximizeButton");
438 var minLink = $("#sidebarMinimizeButton");
439
440 if(toc.length)
441 {
442 toc.css("display", "none");
443 }
444
445 maxLink.css("display", "block");
446 minLink.css("display", "none");
447}
448
449function maximizeSidebar()
450{
451 var coverImage = $("#coverImage");
452 var toc = $("#contentsArea");
453 var maxLink = $("#sidebarMaximizeButton");
454 var minLink = $("#sidebarMinimizeButton");
455
456 if(coverImage.length)
457 {
458 coverImage.css("display", "block");
459 }
460
461 if(toc.length)
462 {
463 toc.css("display", "block");
464 }
465
466 maxLink.css("display", "none");
467 minLink.css("display", "block");
468}
469
470function extractFilteredPagesToOwnDocument()
471{
472 var oids = new Array();
473 var filtered = $(".pageSliderCol:visible a").each(function()
474 {
475 var hrefString = $(this).attr("href");
476 var oidStart = hrefString.indexOf(".") + 1;
477 var oidFinish = hrefString.indexOf("'", oidStart + 1);
478
479 oids.push(hrefString.substring(oidStart, oidFinish));
480 });
481
482 var sectionString = "[";
483 for(var i = 0; i < oids.length; i++)
484 {
485 sectionString += "\"" + oids[i] + "\"";
486 if(i < oids.length - 1)
487 {
488 sectionString += ",";
489 }
490 }
491 sectionString += "]";
492
493 var url = "cgi-bin/document-extract.pl?a=extract-archives-doc&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&json-sections=" + sectionString + "&site=" + gs.xsltParams.site_name;// + "&json-metadata=[{"metaname":"dc.Title","metavalue":"All Black Rugy Success","metamode":"accumulate"]"
494 $("#extractDocButton").attr("disabled", "disabled").html("Exracting document...");
495 $.ajax(url)
496 .success(function(response)
497 {
498 $("#extractDocButton").html("Building collection...");
499 gs.functions.buildCollections([gs.cgiParams.c], function()
500 {
501 $("#extractDocButton").removeAttr("disabled").html("Extract these pages to document");
502 });
503 })
504 .error(function()
505 {
506 $("#extractDocButton").removeAttr("disabled").html("Extract these pages to document");
507 });
508}
509
510/**********************
511* PAGED-IMAGE SCRIPTS *
512**********************/
513
514function changeView()
515{
516 var viewList = $("#viewSelection");
517 var currentVal = viewList.val();
518
519 var view;
520 if(currentVal == "Image view")
521 {
522 setImageVisible(true);
523 setTextVisible(false);
524 view = "image";
525 }
526 else if(currentVal == "Text view")
527 {
528 setImageVisible(false);
529 setTextVisible(true);
530 view = "text";
531 }
532 else
533 {
534 setImageVisible(true);
535 setTextVisible(true);
536 view = "";
537 }
538
539 var url = gs.xsltParams.library_name + "?a=d&view=" + view + "&c=" + gs.cgiParams.c;
540 $.ajax(url);
541}
542
543function setImageVisible(visible)
544{
545 $("div").each(function()
546 {
547 if($(this).attr("id") && $(this).attr("id").search(/^image/) != -1)
548 {
549 $(this).css("display", (visible ? "block" : "none"));
550 }
551 });
552}
553
554function setTextVisible(visible)
555{
556 $("div").each(function()
557 {
558 if($(this).attr("id") && $(this).attr("id").search(/^text/) != -1)
559 {
560 $(this).css("display", (visible ? "block" : "none"));
561 }
562 });
563}
564
565function retrieveTableOfContentsAndTitles()
566{
567 var ilt = "";
568 ilt += '<xsl:template match="/">';
569 ilt += '<xsl:for-each select="/page/pageResponse/document/documentNode">';
570 ilt += '<xsl:call-template name="documentNodeTOC"/>';
571 ilt += '</xsl:for-each>';
572 ilt += '</xsl:template>';
573
574 var url = gs.xsltParams.library_name + "?a=d&ed=1&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&ilt=" + ilt.replace(/ /g, "%20");
575
576 $.ajax(url)
577 .success(function(response)
578 {
579 $("#tableOfContents").html(response);
580 replaceLinksWithSlider();
581 var loading = $("#tocLoadingImage");
582 loading.remove();
583 })
584 .error(function()
585 {
586 setTimeout(function(){retrieveTableOfContentsAndTitles();}, 1000);
587 });
588}
589
590function replaceLinksWithSlider()
591{
592 var tableOfContents = $("#tableOfContents");
593
594 var leafSections = new Array();
595 var liElems = tableOfContents.find("li").each(function()
596 {
597 var section = $(this);
598 var add = true;
599 for(var j = 0; j < leafSections.length; j++)
600 {
601 if(leafSections[j] == undefined){continue;}
602
603 var leaf = $(leafSections[j]);
604 if(leaf.attr("id").search(section.attr("id")) != -1)
605 {
606 add = false;
607 }
608
609 if(section.attr("id").search(leaf.attr("id")) != -1)
610 {
611 delete leafSections[j];
612 }
613 }
614
615 if(add)
616 {
617 leafSections.push(section);
618 }
619 });
620
621 for(var i = 0 ; i < leafSections.length; i++)
622 {
623 if(leafSections[i] == undefined){continue;}
624
625 leafSections[i].css("display", "none");
626 var links = leafSections[i].find("a");
627
628 var widget = new SliderWidget(links);
629 leafSections[i].before(widget.getElem());
630 }
631
632 //Disable all TOC toggles
633 var imgs = $("img").each(function()
634 {
635 var currentImage = $(this);
636 if(currentImage.attr("id") && currentImage.attr("id").search(/^ttoggle/) != -1)
637 {
638 currentImage.attr("onclick", "");
639 currentImage.click(function()
640 {
641 var sliderDiv = currentImage.parents("table").first().next();
642 if(sliderDiv.is(":visible"))
643 {
644 sliderDiv.hide();
645 }
646 else
647 {
648 sliderDiv.show();
649 }
650 });
651 }
652 else if(currentImage.attr("id") && currentImage.attr("id").search(/^dtoggle/) != -1)
653 {
654 currentImage.attr("onclick", currentImage.attr("onclick").replace(/\)/, ", null, true)"));
655 }
656 });
657}
658
659function SliderWidget(_links)
660{
661 //****************
662 //MEMBER VARIABLES
663 //****************
664
665 //The container for the widget
666 var _mainDiv = $("<div>");
667 _mainDiv.attr("class", "ui-widget-content pageSlider");
668
669 //The table of images
670 var _linkTable = $("<table>");
671 _mainDiv.append(_linkTable);
672
673 //The image row of the table
674 var _linkRow = $("<tr>");
675 _linkTable.append(_linkRow);
676
677 //The list of titles we can search through
678 var _titles = new Array();
679
680 //Keep track of the slider position
681 var _prevScroll = 0;
682
683 //****************
684 //PUBLIC FUNCTIONS
685 //****************
686
687 //Function that returns the widget element
688 this.getElem = function()
689 {
690 return _mainDiv;
691 }
692
693 //*****************
694 //PRIVATE FUNCTIONS
695 //*****************
696
697 var setUpFilterBox = function()
698 {
699 var filter = $("#filterText");
700 filter.keyup(function()
701 {
702 var fullValue = filter.val();
703 var values = fullValue.split(",");
704
705 var matchingTitles = new Array();
706
707 for (var l = 0; l < values.length; l++)
708 {
709 var currentValue = values[l].replace(/^ +/g, "").replace(/ +$/g, "");
710 var isRange = (currentValue.search(/\d+-\d+/) != -1)
711
712 var found = false;
713 for(var i = 0; i < _titles.length; i++)
714 {
715 if(_titles[i][0] == currentValue)
716 {
717 found = true;
718 }
719 }
720
721 if(!found && isRange)
722 {
723 var firstNumber = currentValue.replace(/(\d+)-\d+/, "$1");
724 var secondNumber = currentValue.replace(/\d+-(\d+)/, "$1");
725
726 if(firstNumber <= secondNumber)
727 {
728 for(var i = firstNumber; i <= secondNumber; i++)
729 {
730 var numString = i + "";
731 for(var j = 0; j < _titles.length; j++)
732 {
733 var currentTitle = _titles[j];
734 if(currentTitle[0].search(numString) != -1)
735 {
736 matchingTitles.push(currentTitle);
737 }
738 }
739 }
740 }
741 }
742 else
743 {
744 for(var i = 0; i < _titles.length; i++)
745 {
746 var currentTitle = _titles[i];
747 if(currentTitle[0].search(currentValue.replace(/\./g, "\\.")) != -1)
748 {
749 matchingTitles.push(currentTitle);
750 }
751 }
752 }
753 }
754
755 for(var i = 0; i < _titles.length; i++)
756 {
757 $(_titles[i][1].cell).css("display", "none");
758 }
759
760 for(var i = 0; i < matchingTitles.length; i++)
761 {
762 $(matchingTitles[i][1].cell).css("display", "table-cell");
763 }
764 });
765 }
766
767 var getImage = function(page, attemptNumber)
768 {
769 var href = page.getAttribute("href");
770 var startHREF = href.indexOf("'") + 1;
771 var endHREF = href.indexOf("'", startHREF);
772 var nodeID = href.substring(startHREF, endHREF);
773 href = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + nodeID;
774
775 var template = '';
776 template += '<xsl:template match="/">';
777 template += '<gsf:metadata name=\"Thumb\"/>';
778 template += '<html>';
779 template += '<img>';
780 template += '<xsl:attribute name="src">';
781 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/collection/metadataList/metadata[@name = 'httpPath']\"/>";
782 template += '<xsl:text>/index/assoc/</xsl:text>';
783 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/metadataList/metadata[@name = 'assocfilepath']\"/>";
784 template += '<xsl:text>/</xsl:text>';
785 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document//documentNode[@nodeID = '" + nodeID + "']/metadataList/metadata[@name = 'Thumb']\"/>";
786 template += '</xsl:attribute>';
787 template += '</img>';
788 template += '<p>';
789 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/documentNode/metadataList/metadata[@name = 'Title']\"/>";
790 template += '</p>';
791 template += '</html>';
792 template += '</xsl:template>';
793
794 var url = href + "?ilt=" + template.replace(" ", "%20");
795 $.ajax(url)
796 .success(function(text)
797 {
798 var hrefStart = text.indexOf("src=\"") + 5;
799 if(hrefStart == -1)
800 {
801 page.isLoading = false;
802 page.noImage = true;
803 $(page.image).attr("src", gs.imageURLs.blank);
804 return;
805 }
806 var hrefEnd = text.indexOf("\"", hrefStart);
807 var href = text.substring(hrefStart, hrefEnd);
808
809 var image = $("<img>");
810 image.load(function()
811 {
812 $(page.link).html("");
813 $(page.link).append(image);
814 page.isLoading = false;
815 page.imageLoaded = true;
816 });
817 image.error(function()
818 {
819 if(!attemptNumber || attemptNumber < 3)
820 {
821 setTimeout(function(){getImage(page, ((!attemptNumber) ? 1 : attemptNumber + 1));}, 500);
822 }
823 else
824 {
825 page.isLoading = false;
826 page.noImage = true;
827 image.attr("src", gs.imageURLs.blank);
828 }
829 });
830 image.attr("src", href);
831
832 var titleStart = text.indexOf("<p>") + 3;
833 var titleEnd = text.indexOf("</p>");
834 var title = text.substring(titleStart, titleEnd);
835 })
836 .error(function()
837 {
838 page.failed = true;
839 if(!attemptNumber || attemptNumber < 3)
840 {
841 setTimeout(function(){getImage(page, ((!attemptNumber) ? 1 : attemptNumber + 1));}, 500);
842 }
843 else
844 {
845 var image = $("<img>", {"src": gs.imageURLs.blank});
846 $(page.link).html("");
847 $(page.link).append(image);
848 page.isLoading = false;
849 page.noImage = true;
850 }
851 });
852 }
853
854 var startCheckFunction = function()
855 {
856 var checkFunction = function(forced)
857 {
858 //Don't bother checking if we haven't scrolled very far
859 if(Math.abs(_mainDiv.scrollLeft() - _prevScroll) > 100 || forced)
860 {
861 _prevScroll = _mainDiv.scrollLeft();
862 _checking = true;
863 var widgetLeft = _mainDiv.offset().left;
864 var widgetRight = widgetLeft + _mainDiv.width();
865
866 var visiblePages = new Array();
867 for(var i = 0; i < _links.length; i++)
868 {
869 var current = _links[i].cell;
870 var currentLeft = current.offset().left;
871 var currentRight = currentLeft + current.width();
872
873 if(currentRight > widgetLeft && currentLeft < widgetRight)
874 {
875 visiblePages.push(_links[i]);
876 }
877 }
878
879 for(var i = 0; i < visiblePages.length; i++)
880 {
881 var page = visiblePages[i];
882 if(!page || page.imageLoaded || page.noImage || page.isLoading)
883 {
884 continue;
885 }
886
887 page.isLoading = true;
888 getImage(page);
889 }
890 _checking = false;
891 }
892 }
893
894 setTimeout(checkFunction, 250);
895 setInterval(function(){checkFunction(true)}, 2000);
896 _mainDiv.scroll(checkFunction);
897 }
898
899 //***********
900 //CONSTRUCTOR
901 //***********
902
903 for(var i = 0; i < _links.length; i++)
904 {
905 var col = $("<td>");
906 _linkRow.append(col);
907 col.addClass("pageSliderCol");
908 _links[i].cell = col;
909
910 var link = $("<a>");
911 col.append(link);
912 _links[i].link = link;
913 var href = $(_links[i]).attr("href");
914 link.attr("href", href.replace(/\)/, ", 0, true)"));
915
916 if(!_linkCellMap[href])
917 {
918 _linkCellMap[href] = new Array();
919 }
920 _linkCellMap[href].push(_links[i]);
921
922 var loadingText = $("<p>Loading image</p>");
923 link.append(loadingText);
924
925 var image = $("<img>");
926 link.append(image);
927 image.attr("src", gs.imageURLs.loading);
928 _links[i].image = image;
929
930 var title = $(_links[i]).html();
931 if(title.search(/^[^ ]+ [^ ]+$/) != -1)
932 {
933 var section = title.replace(/^([^ ]+) [^ ]+$/, "$1");
934 var page = title.replace(/^[^ ]+ ([^ ]+)$/, "$1");
935 if(page.search(/^[0-9]+$/) != -1)
936 {
937 title = page;
938 }
939 }
940 _titles.push([title, _links[i]]);
941
942 col.append($("<br>"));
943 col.append(title);
944 }
945
946 setUpFilterBox();
947 startCheckFunction();
948}
949
950/***********************
951* HIGHLIGHTING SCRIPTS *
952***********************/
953function swapHighlight(imageClicked)
954{
955 var hlCheckbox = $("#highlightOption");
956
957 if(imageClicked)
958 {
959 $(hlCheckbox).attr("checked", !$(hlCheckbox).attr("checked"));
960 }
961
962 var from;
963 var to;
964 if(hlCheckbox.attr("checked"))
965 {
966 from = "noTermHighlight";
967 to = "termHighlight";
968 }
969 else
970 {
971 from = "termHighlight";
972 to = "noTermHighlight";
973 }
974
975 var spans = $("span").each(function()
976 {
977 if($(this).hasClass(from))
978 {
979 $(this).removeClass(from);
980 $(this).addClass(to);
981 }
982 });
983}
984
985/**************************
986* REALISTIC BOOKS SCRIPTS *
987**************************/
988
989function bookInit()
990{
991 loadBook();
992 hideText();
993 showBook();
994 swapLinkJavascript(false);
995}
996
997function hideText()
998{
999 $("#gs-document-text").css("visibility", "hidden");
1000}
1001
1002function showText()
1003{
1004 $("#gs-document-text").css("visibility", "visible");
1005}
1006
1007function hideBook()
1008{
1009 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "hidden", "height": "0px"});
1010}
1011
1012function showBook()
1013{
1014 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "visible", "height": "600px"});
1015}
1016
1017function swapLinkJavascript(rbOn)
1018{
1019 var option = $("#rbOption");
1020 var optionImage = $("#rbOptionImage");
1021
1022 if(rbOn)
1023 {
1024 option.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
1025 optionImage.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
1026 $(option).attr("checked", false);
1027 }
1028 else
1029 {
1030 option.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1031 optionImage.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1032 $(option).attr("checked", true);
1033 }
1034}
1035
1036function loadBook()
1037{
1038 var doc_url = document.URL;
1039 doc_url = doc_url.replace(/(&|\?)book=[a-z]+/gi,'');
1040 doc_url += '&book=flashxml';
1041
1042 var img_cover = gs.collectionMetadata.httpPath + '/index/assoc/' + gs.documentMetadata.assocfilepath + '/cover.jpg';
1043
1044 var flash_plug_html = ""
1045 flash_plug_html += '<OBJECT align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \n';
1046 flash_plug_html += ' height="600px" id="bookObject" swLiveConnect="true" \n';
1047 flash_plug_html += ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" \n';
1048 flash_plug_html += ' width="70%">\n';
1049 flash_plug_html += ' <PARAM name="allowScriptAccess" value="always" />\n';
1050 flash_plug_html += ' <PARAM name="movie" value="Book.swf';
1051 flash_plug_html += '?src_image=' + escape(img_cover);
1052 flash_plug_html += '&doc_url=' + escape(doc_url);
1053 flash_plug_html += '" />\n';
1054 flash_plug_html += ' <PARAM name="quality" value="high" />\n';
1055 flash_plug_html += ' <PARAM name="bgcolor" value="#FFFFFF" />\n';
1056 flash_plug_html += ' <EMBED align="middle" \n';
1057 flash_plug_html += ' allowScriptAccess="always" swLiveConnect="true" \n';
1058 flash_plug_html += ' bgcolor="#FFFFFF" height="600px" name="Book" \n';
1059 flash_plug_html += ' pluginspage="http://www.macromedia.com/go/getflashplayer" \n';
1060 flash_plug_html += ' quality="high" id="bookEmbed"\n';
1061 flash_plug_html += ' src="Book.swf';
1062 flash_plug_html += '?src_image=' + escape(img_cover);
1063 flash_plug_html += '&doc_url=' + escape(doc_url);
1064 flash_plug_html += '"\n';
1065 flash_plug_html += ' type="application/x-shockwave-flash" width="70%" />\n';
1066 flash_plug_html += '</OBJECT>\n';
1067 $("#bookdiv").html(flash_plug_html);
1068}
1069
1070/************************
1071* METADATA EDIT SCRIPTS *
1072************************/
1073
1074function addEditMetadataLink(cell)
1075{
1076 cell = $(cell);
1077 var id = cell.attr("id").substring(6);
1078 var metaTable = gs.jqGet("meta" + id);
1079
1080 var row = cell.parent();
1081 var newCell = $("<td>", {"style": "font-size:0.7em; padding:0px 10px", "class": "editMetadataButton"});
1082 var linkSpan = $("<span>", {"class": "ui-state-default ui-corner-all", "style": "padding: 2px; float:left;"});
1083
1084 var linkLabel = $("<span>edit metadata</span>");
1085 var linkIcon = $("<span>", {"class": "ui-icon ui-icon-folder-collapsed"});
1086 newCell.linkIcon = linkIcon;
1087 newCell.linkLabel = linkLabel;
1088
1089 var uList = $("<ul>", {"style": "outline: 0 none; margin:0px; padding:0px;"});
1090 var labelItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1091 var iconItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1092
1093 uList.append(iconItem);
1094 uList.append(labelItem);
1095 labelItem.append(linkLabel);
1096 iconItem.append(linkIcon);
1097
1098 var newLink = $("<a>", {"href": "javascript:;"});
1099 newLink.click(function()
1100 {
1101 if(metaTable.css("display") == "none")
1102 {
1103 linkLabel.html("hide metadata");
1104 linkIcon.attr("class", "ui-icon ui-icon-folder-open");
1105 metaTable.css("display", "block");
1106 metaTable.metaNameField.css("display", "inline");
1107 metaTable.addRowButton.css("display", "inline");
1108 }
1109 else
1110 {
1111 linkLabel.html("edit metadata");
1112 linkIcon.attr("class", "ui-icon ui-icon-folder-collapsed");
1113 metaTable.css("display", "none");
1114 metaTable.metaNameField.css("display", "none");
1115 metaTable.addRowButton.css("display", "none");
1116 }
1117 });
1118
1119 newLink.append(uList);
1120 linkSpan.append(newLink);
1121 newCell.append(linkSpan);
1122 row.append(newCell);
1123
1124 addFunctionalityToTable(metaTable);
1125 metaTable.metaNameField.css("display", "none");
1126 metaTable.addRowButton.css("display", "none");
1127}
1128
1129function setEditingFeaturesVisible(visible)
1130{
1131 if(visible)
1132 {
1133 $("#editContentButton").html("Hide editor");
1134 $("#editContentButtonDiv").attr("class", "ui-state-default ui-corner-all");
1135 }
1136 else
1137 {
1138 $("#editContentButton").html("Edit content");
1139 $("#editContentButtonDiv").attr("class", "");
1140 }
1141
1142 var visibility = (visible ? "" : "none");
1143 $("#saveButton, #metadataListLabel, #metadataSetList").css("display", visibility);
1144
1145 $(".editMetadataButton").each(function()
1146 {
1147 $(this).css("display", visibility);
1148 $(this.linkLabel).html("edit metadata");
1149 $(this.linkIcon).attr("class", "ui-icon ui-icon-folder-collapsed");
1150 });
1151
1152 $("table").each(function()
1153 {
1154 if($(this).attr("id") && $(this).attr("id").search(/^meta/) != -1)
1155 {
1156 $(this).css("display", "none");
1157 $(this.metaNameField).css("display", "none");
1158 $(this.addRowButton).css("display", "none");
1159 }
1160 });
1161}
1162
1163/* override this function in other interface/site/collection if you want
1164 a different set of metadata sets
1165 Use in conjunction with the dynamic_metadata_list variable. */
1166function setStaticMetadataSets(list) {
1167 addMetaSetToList(list, "All");
1168}
1169
1170function readyPageForEditing()
1171{
1172
1173 if($("#metadataSetList").length)
1174 {
1175 var setList = $("#metadataSetList");
1176 if(!setList.css("display") || setList.css("display") == "")
1177 {
1178 setEditingFeaturesVisible(false);
1179 }
1180 else
1181 {
1182 setEditingFeaturesVisible(true);
1183 }
1184 return;
1185 }
1186
1187 $("#editContentButton").html("Hide Editor");
1188
1189 var textDivs = $(".sectionText").each(function(){de.doc.registerEditSection(this);});
1190
1191 var editBar = $("#editBarLeft");
1192
1193 var visibleMetadataList = $("<select>", {"id": "metadataSetList"});
1194 setStaticMetadataSets(visibleMetadataList);
1195
1196 var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"});
1197 metadataListLabel.html("Visible metadata: ");
1198 editBar.append(metadataListLabel);
1199 editBar.append(visibleMetadataList);
1200 visibleMetadataList.change(onVisibleMetadataSetChange);
1201 editBar.append("<br>");
1202 for (var i=0; i< save_and_rebuild_buttons.length; i++) {
1203 var button_type = save_and_rebuild_buttons[i];
1204 if (button_type == "save") {
1205 var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"});
1206 saveButton.click(saveMetadataChanges);
1207 saveButton.html("Save changes");
1208 editBar.append(saveButton);
1209 } else if(button_type == "rebuild") {
1210 var rebuildButton = $("<button>", {"id": "rebuildButton", "class": "ui-state-default ui-corner-all"});
1211 rebuildButton.click(rebuildCollection);
1212 rebuildButton.html("Rebuild");
1213 editBar.append(rebuildButton);
1214 } else if (button_type == "saveandrebuild") {
1215 var saveAndRebuildButton = $("<button>", {"id": "saveAndRebuildButton", "class": "ui-state-default ui-corner-all"});
1216 saveAndRebuildButton.click(save);
1217 saveAndRebuildButton.html("Save and Rebuild");
1218 editBar.append(saveAndRebuildButton);
1219
1220 }
1221 }
1222 var statusBarDiv = $("<div>");
1223 editBar.append(statusBarDiv);
1224 _statusBar = new StatusBar(statusBarDiv[0]);
1225
1226 var titleDivs = $(".sectionTitle");
1227 for(var i = 0; i < titleDivs.length; i++)
1228 {
1229 addEditMetadataLink(titleDivs[i]);
1230 }
1231
1232 _baseURL = gs.xsltParams.library_name;
1233}
1234
1235
1236/* this is a cut down version of save() from documentmaker_scripts_util.js */
1237function saveMetadataChanges() {
1238
1239 console.log("Saving metadata changes");
1240
1241 // get collection name
1242 var collection = gs.cgiParams.c;;
1243
1244 // get document id
1245 var docID = gs.cgiParams.d;
1246
1247 var metadataChanges = new Array();
1248 if (_deletedMetadata.length > 0) {
1249
1250 for(var i = 0; i < _deletedMetadata.length; i++) {
1251
1252 var currentRow = _deletedMetadata[i];
1253
1254 //Get metadata name
1255 var cells = currentRow.getElementsByTagName("TD");
1256 var nameCell = cells[0];
1257 var name = nameCell.innerHTML;
1258 var valueCell = cells[1];
1259 var value = valueCell.innerHTML;
1260 metadataChanges.push({type:'delete', docID:docID, name:name, value:value});
1261 removeFromParent(currentRow);
1262 }
1263 }
1264
1265 var changes = de.Changes.getChangedEditableSections();
1266 for(var i = 0; i < changes.length; i++) {
1267
1268 var changedElem = changes[i];
1269
1270 //Get metadata name
1271 var row = changedElem.parentNode;
1272 var cells = row.getElementsByTagName("TD");
1273 var nameCell = cells[0];
1274 var name = nameCell.innerHTML;
1275 var value = changedElem.innerHTML;
1276 value = value.replace(/&nbsp;/g, " ");
1277
1278 var orig = changedElem.originalValue;
1279 if (orig) {
1280 orig = orig.replace(/&nbsp;/g, " ");
1281 }
1282 metadataChanges.push({collection:collection, docID:docID, name:name, value:value, orig:orig});
1283 changedElem.originalValue = changedElem.innerHTML;
1284
1285 }
1286
1287 if (metadataChanges.length ==0) {
1288 console.log ("... No changes detected. ");
1289 return;
1290 }
1291
1292 var processChangesLoop = function(index)
1293 {
1294 var change = metadataChanges[index];
1295
1296 var callbackFunction;
1297 if(index + 1 == metadataChanges.length)
1298 {
1299 callbackFunction = function(){console.log("Completed saving metadata changes. You must rebuild the collection for the changes to take effect.");};
1300 }
1301 else
1302 {
1303 callbackFunction = function(){processChangesLoop(index + 1)};
1304 }
1305 if (change.type == "delete") {
1306 gs.functions.removeArchivesMetadata(collection, gs.xsltParams.site_name, change.docID, change.name, null, change.value, function(){callbackFunction();});
1307 } else {
1308 if(change.orig)
1309 {
1310 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, change.orig, "override", function(){callbackFunction();});
1311 }
1312 else
1313 {
1314 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, null, "accumulate", function(){callbackFunction();});
1315 }
1316 }
1317 }
1318 processChangesLoop(0);
1319 /* need to clear the changes from the page */
1320 de.Changes.clear();
1321 while (_deletedMetadata.length>0) {
1322 _deletedMetadata.pop();
1323 }
1324
1325}
1326
1327
1328
1329
1330function rebuildCollection() {
1331
1332 console.log("rebuilding collection");
1333 var collection = gs.cgiParams.c;
1334
1335 var collectionsArray = new Array();
1336 collectionsArray.push(collection);
1337 buildCollections(collectionsArray);
1338}
1339
1340/***************
1341* MENU SCRIPTS *
1342***************/
1343function moveScroller() {
1344 var move = function() {
1345 var editbar = $("#editBar");
1346 var st = $(window).scrollTop();
1347 var fa = $("#float-anchor").offset().top;
1348 if(st > fa) {
1349
1350 editbar.css({
1351 position: "fixed",
1352 top: "0px",
1353 width: editbar.data("width"),
1354 //width: "30%"
1355 });
1356 } else {
1357 editbar.data("width", editbar.css("width"));
1358 editbar.css({
1359 position: "relative",
1360 top: "",
1361 width: ""
1362 });
1363 }
1364 };
1365 $(window).scroll(move);
1366 move();
1367}
1368
1369
1370function floatMenu(enabled)
1371{
1372 var menu = $(".tableOfContentsContainer");
1373 if(enabled)
1374 {
1375 menu.data("position", menu.css("position"));
1376 menu.data("width", menu.css("width"));
1377 menu.data("right", menu.css("right"));
1378 menu.data("top", menu.css("top"));
1379 menu.data("max-height", menu.css("max-height"));
1380 menu.data("overflow", menu.css("overflow"));
1381 menu.data("z-index", menu.css("z-index"));
1382
1383 menu.css("position", "fixed");
1384 menu.css("width", "300px");
1385 menu.css("right", "0px");
1386 menu.css("top", "100px");
1387 menu.css("max-height", "600px");
1388 menu.css("overflow", "auto");
1389 menu.css("z-index", "200");
1390
1391 $("#unfloatTOCButton").show();
1392 }
1393 else
1394 {
1395 menu.css("position", menu.data("position"));
1396 menu.css("width", menu.data("width"));
1397 menu.css("right", menu.data("right"));
1398 menu.css("top", menu.data("top"));
1399 menu.css("max-height", menu.data("max-height"));
1400 menu.css("overflow", menu.data("overflow"));
1401 menu.css("z-index", menu.data("z-index"));
1402
1403 $("#unfloatTOCButton").hide();
1404 $("#floatTOCToggle").attr("checked", false);
1405 }
1406
1407 var url = gs.xsltParams.library_name + "?a=d&ftoc=" + (enabled ? "1" : "0") + "&c=" + gs.cgiParams.c;
1408
1409 $.ajax(url);
1410}
1411
1412/********************
1413* SLIDESHOW SCRIPTS *
1414********************/
1415
1416function showSlideShow()
1417{
1418 if(!($("#gs-slideshow").length))
1419 {
1420 var slideshowDiv = $("<div>", {id:"gs-slideshow", style:"height:100%;"});
1421 var loadingImage = $("<img>", {src:gs.imageURLs.loading});
1422 slideshowDiv.append(loadingImage);
1423
1424 $.blockUI({message: $(slideshowDiv), css:{top: "5%", left: "5%", width: "90%", height: "90%", overflow: "auto", cursor: "auto"}});
1425
1426 retrieveImagesForSlideShow(function(imageIDArray)
1427 {
1428 loadingImage.hide();
1429 if(imageIDArray && imageIDArray.length > 0)
1430 {
1431 var imageURLs = new Array();
1432 for(var i = 0; i < imageIDArray.length; i++)
1433 {
1434 if(imageIDArray[i].source && imageIDArray[i].source.search(/.*\.(gif|jpg|jpeg|png)$/) != -1)
1435 {
1436 imageURLs.push(gs.collectionMetadata.httpPath + "/index/assoc/" + gs.documentMetadata.assocfilepath + "/" + imageIDArray[i].source);
1437 }
1438 }
1439 new SlideShowWidget(slideshowDiv, imageURLs, imageIDArray);
1440 }
1441 });
1442 }
1443 else
1444 {
1445 $("#gs-slideshow").show();
1446 }
1447}
1448
1449function retrieveImagesForSlideShow(callback)
1450{
1451 var template = "";
1452 template += '<xsl:template match="/">';
1453 template += '<images>[';
1454 template += '<xsl:for-each select="//documentNode">';
1455 template += '<xsl:text disable-output-escaping="yes">{"source":"</xsl:text><gsf:metadata name="Source"/><xsl:text disable-output-escaping="yes">",</xsl:text>';
1456 template += '<xsl:text disable-output-escaping="yes">"id":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">"}</xsl:text>';
1457 template += '<xsl:if test="position() != count(//documentNode)">,</xsl:if>';
1458 template += '</xsl:for-each>';
1459 template += ']</images>';
1460 template += '</xsl:template>';
1461
1462 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + gs.cgiParams.d + "?ed=1&ilt=" + template.replace(" ", "%20");
1463
1464 $.ajax(
1465 {
1466 url:url,
1467 success: function(data)
1468 {
1469 var startIndex = data.indexOf(">", data.indexOf(">") + 1) + 1;
1470 var endIndex = data.lastIndexOf("<");
1471 var arrayString = data.substring(startIndex, endIndex);
1472 var imageIDArray = eval(arrayString);
1473
1474 callback(imageIDArray);
1475 }
1476 });
1477}
1478
1479function SlideShowWidget(mainDiv, images, idArray)
1480{
1481 var _inTransition = false;
1482 var _images = new Array();
1483 var _mainDiv = mainDiv;
1484 var _imageDiv = $("<div>", {id:"ssImageDiv", style:"height:95%; overflow:auto;"});
1485 var _navDiv = $("<div>", {style:"height:5%;"});
1486 var _nextButton = $("<img>", {src:gs.imageURLs.next, style:"float:right; cursor:pointer;"});
1487 var _prevButton = $("<img>", {src:gs.imageURLs.prev, style:"float:left; cursor:pointer; display:none;"});
1488 var _closeLink = $("<a href=\"javascript:$.unblockUI()\">Close Slideshow</a>");
1489 var _clearDiv = $("<div>", {style:"clear:both;"});
1490 var _currentIndex = 0;
1491
1492 _navDiv.append(_nextButton);
1493 _navDiv.append(_closeLink);
1494 _navDiv.append(_prevButton);
1495 _navDiv.append(_clearDiv);
1496 _mainDiv.append(_navDiv);
1497 _mainDiv.append(_imageDiv);
1498
1499 for(var i = 0; i < images.length; i++)
1500 {
1501 _images.push($("<img>", {src:images[i], "class":"slideshowImage"}));
1502 }
1503
1504 if(_images.length < 2)
1505 {
1506 _nextButton.css("display", "none");
1507 }
1508
1509 _imageDiv.append(_images[0]);
1510
1511 this.nextImage = function()
1512 {
1513 if(!_inTransition)
1514 {
1515 _inTransition = true;
1516 if((_currentIndex + 1) < _images.length)
1517 {
1518 _prevButton.css("display", "");
1519 if(_currentIndex + 1 == _images.length - 1)
1520 {
1521 _nextButton.css("display", "none");
1522 }
1523
1524 _imageDiv.fadeOut(500, function()
1525 {
1526 _imageDiv.empty();
1527 _imageDiv.append(_images[_currentIndex + 1]);
1528 _currentIndex++;
1529 _imageDiv.fadeIn(500, function()
1530 {
1531 _inTransition = false;
1532 });
1533 });
1534 }
1535 else
1536 {
1537 _inTransition = false;
1538 }
1539 }
1540 }
1541
1542 this.prevImage = function()
1543 {
1544 if(!_inTransition)
1545 {
1546 _inTransition = true;
1547 if((_currentIndex - 1) >= 0)
1548 {
1549 _nextButton.css("display", "");
1550 if(_currentIndex - 1 == 0)
1551 {
1552 _prevButton.css("display", "none");
1553 }
1554
1555 _imageDiv.fadeOut(500, function()
1556 {
1557 _imageDiv.empty();
1558 _imageDiv.append(_images[_currentIndex - 1]);
1559 _currentIndex--;
1560 _imageDiv.fadeIn(500, function()
1561 {
1562 _inTransition = false;
1563 });
1564 });
1565 }
1566 else
1567 {
1568 _inTransition = false;
1569 }
1570 }
1571 }
1572
1573 var getRootFilenameFromURL = function(url)
1574 {
1575 var urlSegments = url.split("/");
1576 var filename = urlSegments[urlSegments.length - 1];
1577 return filename.replace(/_thumb\..*$/, "");
1578 }
1579
1580 var setLink = function(currentLink, index)
1581 {
1582 $(currentLink).click(function()
1583 {
1584 _inTransition = true;
1585 _currentIndex = index;
1586 _imageDiv.fadeOut(500, function()
1587 {
1588 _imageDiv.empty();
1589 _imageDiv.append(_images[_currentIndex]);
1590 _imageDiv.fadeIn(500, function()
1591 {
1592 _inTransition = false;
1593 });
1594 });
1595 });
1596 }
1597
1598 var sliderLinks = $(".pageSliderCol a");
1599 for(var i = 0; i < sliderLinks.length; i++)
1600 {
1601 var currentLink = sliderLinks[i];
1602 var id = $(currentLink).attr("href").split("'")[1];
1603
1604 for(var j = 0; j < idArray.length; j++)
1605 {
1606 if(idArray[j].id == id)
1607 {
1608 var image = idArray[j].source;
1609
1610 for(var l = 0; l < images.length; l++)
1611 {
1612 var filename = getRootFilenameFromURL(images[l]);
1613 if (filename == image)
1614 {
1615 setLink(currentLink, l);
1616 break;
1617 }
1618 }
1619
1620 break;
1621 }
1622 }
1623 }
1624
1625 _nextButton.click(this.nextImage);
1626 _prevButton.click(this.prevImage);
1627}
Note: See TracBrowser for help on using the repository browser.