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

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

if we are starting with a meta set that is not 'all' then we need to call this to make sure only that set is visible

  • Property svn:executable set to *
File size: 41.7 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 onVisibleMetadataSetChange(); // make sure that the selected item in the list is active
1234}
1235
1236
1237/* this is a cut down version of save() from documentmaker_scripts_util.js */
1238function saveMetadataChanges() {
1239
1240 console.log("Saving metadata changes");
1241
1242 // get collection name
1243 var collection = gs.cgiParams.c;;
1244
1245 // get document id
1246 var docID = gs.cgiParams.d;
1247
1248 var metadataChanges = new Array();
1249 if (_deletedMetadata.length > 0) {
1250
1251 for(var i = 0; i < _deletedMetadata.length; i++) {
1252
1253 var currentRow = _deletedMetadata[i];
1254
1255 //Get metadata name
1256 var cells = currentRow.getElementsByTagName("TD");
1257 var nameCell = cells[0];
1258 var name = nameCell.innerHTML;
1259 var valueCell = cells[1];
1260 var value = valueCell.innerHTML;
1261 metadataChanges.push({type:'delete', docID:docID, name:name, value:value});
1262 removeFromParent(currentRow);
1263 }
1264 }
1265
1266 var changes = de.Changes.getChangedEditableSections();
1267 for(var i = 0; i < changes.length; i++) {
1268
1269 var changedElem = changes[i];
1270
1271 //Get metadata name
1272 var row = changedElem.parentNode;
1273 var cells = row.getElementsByTagName("TD");
1274 var nameCell = cells[0];
1275 var name = nameCell.innerHTML;
1276 var value = changedElem.innerHTML;
1277 value = value.replace(/&nbsp;/g, " ");
1278
1279 var orig = changedElem.originalValue;
1280 if (orig) {
1281 orig = orig.replace(/&nbsp;/g, " ");
1282 }
1283 metadataChanges.push({collection:collection, docID:docID, name:name, value:value, orig:orig});
1284 changedElem.originalValue = changedElem.innerHTML;
1285
1286 }
1287
1288 if (metadataChanges.length ==0) {
1289 console.log ("... No changes detected. ");
1290 return;
1291 }
1292
1293 var processChangesLoop = function(index)
1294 {
1295 var change = metadataChanges[index];
1296
1297 var callbackFunction;
1298 if(index + 1 == metadataChanges.length)
1299 {
1300 callbackFunction = function(){console.log("Completed saving metadata changes. You must rebuild the collection for the changes to take effect.");};
1301 }
1302 else
1303 {
1304 callbackFunction = function(){processChangesLoop(index + 1)};
1305 }
1306 if (change.type == "delete") {
1307 gs.functions.removeArchivesMetadata(collection, gs.xsltParams.site_name, change.docID, change.name, null, change.value, function(){callbackFunction();});
1308 } else {
1309 if(change.orig)
1310 {
1311 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, change.orig, "override", function(){callbackFunction();});
1312 }
1313 else
1314 {
1315 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, null, "accumulate", function(){callbackFunction();});
1316 }
1317 }
1318 }
1319 processChangesLoop(0);
1320 /* need to clear the changes from the page */
1321 de.Changes.clear();
1322 while (_deletedMetadata.length>0) {
1323 _deletedMetadata.pop();
1324 }
1325
1326}
1327
1328
1329
1330
1331function rebuildCollection() {
1332
1333 console.log("rebuilding collection");
1334 var collection = gs.cgiParams.c;
1335
1336 var collectionsArray = new Array();
1337 collectionsArray.push(collection);
1338 buildCollections(collectionsArray);
1339}
1340
1341/***************
1342* MENU SCRIPTS *
1343***************/
1344function moveScroller() {
1345 var move = function() {
1346 var editbar = $("#editBar");
1347 var st = $(window).scrollTop();
1348 var fa = $("#float-anchor").offset().top;
1349 if(st > fa) {
1350
1351 editbar.css({
1352 position: "fixed",
1353 top: "0px",
1354 width: editbar.data("width"),
1355 //width: "30%"
1356 });
1357 } else {
1358 editbar.data("width", editbar.css("width"));
1359 editbar.css({
1360 position: "relative",
1361 top: "",
1362 width: ""
1363 });
1364 }
1365 };
1366 $(window).scroll(move);
1367 move();
1368}
1369
1370
1371function floatMenu(enabled)
1372{
1373 var menu = $(".tableOfContentsContainer");
1374 if(enabled)
1375 {
1376 menu.data("position", menu.css("position"));
1377 menu.data("width", menu.css("width"));
1378 menu.data("right", menu.css("right"));
1379 menu.data("top", menu.css("top"));
1380 menu.data("max-height", menu.css("max-height"));
1381 menu.data("overflow", menu.css("overflow"));
1382 menu.data("z-index", menu.css("z-index"));
1383
1384 menu.css("position", "fixed");
1385 menu.css("width", "300px");
1386 menu.css("right", "0px");
1387 menu.css("top", "100px");
1388 menu.css("max-height", "600px");
1389 menu.css("overflow", "auto");
1390 menu.css("z-index", "200");
1391
1392 $("#unfloatTOCButton").show();
1393 }
1394 else
1395 {
1396 menu.css("position", menu.data("position"));
1397 menu.css("width", menu.data("width"));
1398 menu.css("right", menu.data("right"));
1399 menu.css("top", menu.data("top"));
1400 menu.css("max-height", menu.data("max-height"));
1401 menu.css("overflow", menu.data("overflow"));
1402 menu.css("z-index", menu.data("z-index"));
1403
1404 $("#unfloatTOCButton").hide();
1405 $("#floatTOCToggle").attr("checked", false);
1406 }
1407
1408 var url = gs.xsltParams.library_name + "?a=d&ftoc=" + (enabled ? "1" : "0") + "&c=" + gs.cgiParams.c;
1409
1410 $.ajax(url);
1411}
1412
1413/********************
1414* SLIDESHOW SCRIPTS *
1415********************/
1416
1417function showSlideShow()
1418{
1419 if(!($("#gs-slideshow").length))
1420 {
1421 var slideshowDiv = $("<div>", {id:"gs-slideshow", style:"height:100%;"});
1422 var loadingImage = $("<img>", {src:gs.imageURLs.loading});
1423 slideshowDiv.append(loadingImage);
1424
1425 $.blockUI({message: $(slideshowDiv), css:{top: "5%", left: "5%", width: "90%", height: "90%", overflow: "auto", cursor: "auto"}});
1426
1427 retrieveImagesForSlideShow(function(imageIDArray)
1428 {
1429 loadingImage.hide();
1430 if(imageIDArray && imageIDArray.length > 0)
1431 {
1432 var imageURLs = new Array();
1433 for(var i = 0; i < imageIDArray.length; i++)
1434 {
1435 if(imageIDArray[i].source && imageIDArray[i].source.search(/.*\.(gif|jpg|jpeg|png)$/) != -1)
1436 {
1437 imageURLs.push(gs.collectionMetadata.httpPath + "/index/assoc/" + gs.documentMetadata.assocfilepath + "/" + imageIDArray[i].source);
1438 }
1439 }
1440 new SlideShowWidget(slideshowDiv, imageURLs, imageIDArray);
1441 }
1442 });
1443 }
1444 else
1445 {
1446 $("#gs-slideshow").show();
1447 }
1448}
1449
1450function retrieveImagesForSlideShow(callback)
1451{
1452 var template = "";
1453 template += '<xsl:template match="/">';
1454 template += '<images>[';
1455 template += '<xsl:for-each select="//documentNode">';
1456 template += '<xsl:text disable-output-escaping="yes">{"source":"</xsl:text><gsf:metadata name="Source"/><xsl:text disable-output-escaping="yes">",</xsl:text>';
1457 template += '<xsl:text disable-output-escaping="yes">"id":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">"}</xsl:text>';
1458 template += '<xsl:if test="position() != count(//documentNode)">,</xsl:if>';
1459 template += '</xsl:for-each>';
1460 template += ']</images>';
1461 template += '</xsl:template>';
1462
1463 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + gs.cgiParams.d + "?ed=1&ilt=" + template.replace(" ", "%20");
1464
1465 $.ajax(
1466 {
1467 url:url,
1468 success: function(data)
1469 {
1470 var startIndex = data.indexOf(">", data.indexOf(">") + 1) + 1;
1471 var endIndex = data.lastIndexOf("<");
1472 var arrayString = data.substring(startIndex, endIndex);
1473 var imageIDArray = eval(arrayString);
1474
1475 callback(imageIDArray);
1476 }
1477 });
1478}
1479
1480function SlideShowWidget(mainDiv, images, idArray)
1481{
1482 var _inTransition = false;
1483 var _images = new Array();
1484 var _mainDiv = mainDiv;
1485 var _imageDiv = $("<div>", {id:"ssImageDiv", style:"height:95%; overflow:auto;"});
1486 var _navDiv = $("<div>", {style:"height:5%;"});
1487 var _nextButton = $("<img>", {src:gs.imageURLs.next, style:"float:right; cursor:pointer;"});
1488 var _prevButton = $("<img>", {src:gs.imageURLs.prev, style:"float:left; cursor:pointer; display:none;"});
1489 var _closeLink = $("<a href=\"javascript:$.unblockUI()\">Close Slideshow</a>");
1490 var _clearDiv = $("<div>", {style:"clear:both;"});
1491 var _currentIndex = 0;
1492
1493 _navDiv.append(_nextButton);
1494 _navDiv.append(_closeLink);
1495 _navDiv.append(_prevButton);
1496 _navDiv.append(_clearDiv);
1497 _mainDiv.append(_navDiv);
1498 _mainDiv.append(_imageDiv);
1499
1500 for(var i = 0; i < images.length; i++)
1501 {
1502 _images.push($("<img>", {src:images[i], "class":"slideshowImage"}));
1503 }
1504
1505 if(_images.length < 2)
1506 {
1507 _nextButton.css("display", "none");
1508 }
1509
1510 _imageDiv.append(_images[0]);
1511
1512 this.nextImage = function()
1513 {
1514 if(!_inTransition)
1515 {
1516 _inTransition = true;
1517 if((_currentIndex + 1) < _images.length)
1518 {
1519 _prevButton.css("display", "");
1520 if(_currentIndex + 1 == _images.length - 1)
1521 {
1522 _nextButton.css("display", "none");
1523 }
1524
1525 _imageDiv.fadeOut(500, function()
1526 {
1527 _imageDiv.empty();
1528 _imageDiv.append(_images[_currentIndex + 1]);
1529 _currentIndex++;
1530 _imageDiv.fadeIn(500, function()
1531 {
1532 _inTransition = false;
1533 });
1534 });
1535 }
1536 else
1537 {
1538 _inTransition = false;
1539 }
1540 }
1541 }
1542
1543 this.prevImage = function()
1544 {
1545 if(!_inTransition)
1546 {
1547 _inTransition = true;
1548 if((_currentIndex - 1) >= 0)
1549 {
1550 _nextButton.css("display", "");
1551 if(_currentIndex - 1 == 0)
1552 {
1553 _prevButton.css("display", "none");
1554 }
1555
1556 _imageDiv.fadeOut(500, function()
1557 {
1558 _imageDiv.empty();
1559 _imageDiv.append(_images[_currentIndex - 1]);
1560 _currentIndex--;
1561 _imageDiv.fadeIn(500, function()
1562 {
1563 _inTransition = false;
1564 });
1565 });
1566 }
1567 else
1568 {
1569 _inTransition = false;
1570 }
1571 }
1572 }
1573
1574 var getRootFilenameFromURL = function(url)
1575 {
1576 var urlSegments = url.split("/");
1577 var filename = urlSegments[urlSegments.length - 1];
1578 return filename.replace(/_thumb\..*$/, "");
1579 }
1580
1581 var setLink = function(currentLink, index)
1582 {
1583 $(currentLink).click(function()
1584 {
1585 _inTransition = true;
1586 _currentIndex = index;
1587 _imageDiv.fadeOut(500, function()
1588 {
1589 _imageDiv.empty();
1590 _imageDiv.append(_images[_currentIndex]);
1591 _imageDiv.fadeIn(500, function()
1592 {
1593 _inTransition = false;
1594 });
1595 });
1596 });
1597 }
1598
1599 var sliderLinks = $(".pageSliderCol a");
1600 for(var i = 0; i < sliderLinks.length; i++)
1601 {
1602 var currentLink = sliderLinks[i];
1603 var id = $(currentLink).attr("href").split("'")[1];
1604
1605 for(var j = 0; j < idArray.length; j++)
1606 {
1607 if(idArray[j].id == id)
1608 {
1609 var image = idArray[j].source;
1610
1611 for(var l = 0; l < images.length; l++)
1612 {
1613 var filename = getRootFilenameFromURL(images[l]);
1614 if (filename == image)
1615 {
1616 setLink(currentLink, l);
1617 break;
1618 }
1619 }
1620
1621 break;
1622 }
1623 }
1624 }
1625
1626 _nextButton.click(this.nextImage);
1627 _prevButton.click(this.prevImage);
1628}
Note: See TracBrowser for help on using the repository browser.