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

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

Using .attr to access 'checked' doesn't work in jquery 1.9.2 and higher. Changing to use .prop instead

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