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

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

working on the save stuff, and changing the buttons to be disabled. not quite working properly yet :-(

  • 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
969 if(imageClicked)
970 {
971 $(hlCheckbox).attr("checked", !$(hlCheckbox).attr("checked"));
972 }
973
974 var from;
975 var to;
976 if(hlCheckbox.attr("checked"))
977 {
978 from = "noTermHighlight";
979 to = "termHighlight";
980 }
981 else
982 {
983 from = "termHighlight";
984 to = "noTermHighlight";
985 }
986
987 var spans = $("span").each(function()
988 {
989 if($(this).hasClass(from))
990 {
991 $(this).removeClass(from);
992 $(this).addClass(to);
993 }
994 });
995}
996
997/**************************
998* REALISTIC BOOKS SCRIPTS *
999**************************/
1000
1001function bookInit()
1002{
1003 loadBook();
1004 hideText();
1005 showBook();
1006 swapLinkJavascript(false);
1007}
1008
1009function hideText()
1010{
1011 $("#gs-document-text").css("visibility", "hidden");
1012}
1013
1014function showText()
1015{
1016 $("#gs-document-text").css("visibility", "visible");
1017}
1018
1019function hideBook()
1020{
1021 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "hidden", "height": "0px"});
1022}
1023
1024function showBook()
1025{
1026 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "visible", "height": "600px"});
1027}
1028
1029function swapLinkJavascript(rbOn)
1030{
1031 var option = $("#rbOption");
1032 var optionImage = $("#rbOptionImage");
1033
1034 if(rbOn)
1035 {
1036 option.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
1037 optionImage.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
1038 $(option).attr("checked", false);
1039 }
1040 else
1041 {
1042 option.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1043 optionImage.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1044 $(option).attr("checked", true);
1045 }
1046}
1047
1048function loadBook()
1049{
1050 var doc_url = document.URL;
1051 doc_url = doc_url.replace(/(&|\?)book=[a-z]+/gi,'');
1052 doc_url += '&book=flashxml';
1053
1054 var img_cover = gs.collectionMetadata.httpPath + '/index/assoc/' + gs.documentMetadata.assocfilepath + '/cover.jpg';
1055
1056 var flash_plug_html = ""
1057 flash_plug_html += '<OBJECT align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \n';
1058 flash_plug_html += ' height="600px" id="bookObject" swLiveConnect="true" \n';
1059 flash_plug_html += ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" \n';
1060 flash_plug_html += ' width="70%">\n';
1061 flash_plug_html += ' <PARAM name="allowScriptAccess" value="always" />\n';
1062 flash_plug_html += ' <PARAM name="movie" value="Book.swf';
1063 flash_plug_html += '?src_image=' + escape(img_cover);
1064 flash_plug_html += '&doc_url=' + escape(doc_url);
1065 flash_plug_html += '" />\n';
1066 flash_plug_html += ' <PARAM name="quality" value="high" />\n';
1067 flash_plug_html += ' <PARAM name="bgcolor" value="#FFFFFF" />\n';
1068 flash_plug_html += ' <EMBED align="middle" \n';
1069 flash_plug_html += ' allowScriptAccess="always" swLiveConnect="true" \n';
1070 flash_plug_html += ' bgcolor="#FFFFFF" height="600px" name="Book" \n';
1071 flash_plug_html += ' pluginspage="http://www.macromedia.com/go/getflashplayer" \n';
1072 flash_plug_html += ' quality="high" id="bookEmbed"\n';
1073 flash_plug_html += ' src="Book.swf';
1074 flash_plug_html += '?src_image=' + escape(img_cover);
1075 flash_plug_html += '&doc_url=' + escape(doc_url);
1076 flash_plug_html += '"\n';
1077 flash_plug_html += ' type="application/x-shockwave-flash" width="70%" />\n';
1078 flash_plug_html += '</OBJECT>\n';
1079 $("#bookdiv").html(flash_plug_html);
1080}
1081
1082/************************
1083* METADATA EDIT SCRIPTS *
1084************************/
1085
1086function addEditMetadataLink(cell)
1087{
1088 cell = $(cell);
1089 var id = cell.attr("id").substring(6);
1090 var metaTable = gs.jqGet("meta" + id);
1091
1092 var row = cell.parent();
1093 var newCell = $("<td>", {"style": "font-size:0.7em; padding:0px 10px", "class": "editMetadataButton"});
1094 var linkSpan = $("<span>", {"class": "ui-state-default ui-corner-all", "style": "padding: 2px; float:left;"});
1095
1096 var linkLabel = $("<span>edit metadata</span>");
1097 var linkIcon = $("<span>", {"class": "ui-icon ui-icon-folder-collapsed"});
1098 newCell.linkIcon = linkIcon;
1099 newCell.linkLabel = linkLabel;
1100
1101 var uList = $("<ul>", {"style": "outline: 0 none; margin:0px; padding:0px;"});
1102 var labelItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1103 var iconItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1104
1105 uList.append(iconItem);
1106 uList.append(labelItem);
1107 labelItem.append(linkLabel);
1108 iconItem.append(linkIcon);
1109
1110 var newLink = $("<a>", {"href": "javascript:;"});
1111 newLink.click(function()
1112 {
1113 if(metaTable.css("display") == "none")
1114 {
1115 linkLabel.html("hide metadata");
1116 linkIcon.attr("class", "ui-icon ui-icon-folder-open");
1117 metaTable.css("display", "block");
1118 metaTable.metaNameField.css("display", "inline");
1119 metaTable.addRowButton.css("display", "inline");
1120 }
1121 else
1122 {
1123 linkLabel.html("edit metadata");
1124 linkIcon.attr("class", "ui-icon ui-icon-folder-collapsed");
1125 metaTable.css("display", "none");
1126 metaTable.metaNameField.css("display", "none");
1127 metaTable.addRowButton.css("display", "none");
1128 }
1129 });
1130
1131 newLink.append(uList);
1132 linkSpan.append(newLink);
1133 newCell.append(linkSpan);
1134 row.append(newCell);
1135
1136 addFunctionalityToTable(metaTable);
1137 metaTable.metaNameField.css("display", "none");
1138 metaTable.addRowButton.css("display", "none");
1139}
1140
1141function setEditingFeaturesVisible(visible)
1142{
1143 if(visible)
1144 {
1145 $("#editContentButton").html("Hide editor");
1146 $("#editContentButtonDiv").attr("class", "ui-state-default ui-corner-all");
1147 }
1148 else
1149 {
1150 $("#editContentButton").html("Edit content");
1151 $("#editContentButtonDiv").attr("class", "");
1152 }
1153
1154 var visibility = (visible ? "" : "none");
1155 $("#metadataListLabel, #metadataSetList").css("display", visibility);
1156
1157 $(".editMetadataButton").each(function()
1158 {
1159 $(this).css("display", visibility);
1160 $(this.linkLabel).html("edit metadata");
1161 $(this.linkIcon).attr("class", "ui-icon ui-icon-folder-collapsed");
1162 });
1163
1164 $("table").each(function()
1165 {
1166 if($(this).attr("id") && $(this).attr("id").search(/^meta/) != -1)
1167 {
1168 $(this).css("display", "none");
1169 $(this.metaNameField).css("display", "none");
1170 $(this.addRowButton).css("display", "none");
1171 }
1172 });
1173}
1174
1175/* override this function in other interface/site/collection if you want
1176 a different set of metadata sets
1177 Use in conjunction with the dynamic_metadata_set_list variable. */
1178function setStaticMetadataSets(list) {
1179 addOptionToList(list, "All", "All");
1180}
1181
1182function readyPageForEditing()
1183{
1184
1185 if($("#metadataSetList").length)
1186 {
1187 var setList = $("#metadataSetList");
1188 if(!setList.css("display") || setList.css("display") == "")
1189 {
1190 setEditingFeaturesVisible(false);
1191 }
1192 else
1193 {
1194 setEditingFeaturesVisible(true);
1195 }
1196 return;
1197 }
1198
1199 $("#editContentButton").html("Hide Editor");
1200
1201 var textDivs = $(".sectionText").each(function(){de.doc.registerEditSection(this);});
1202
1203 var editBar = $("#editBarLeft");
1204
1205 var visibleMetadataList = $("<select>", {"id": "metadataSetList", "class": "ui-state-default"});
1206 setStaticMetadataSets(visibleMetadataList);
1207
1208 var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"});
1209 metadataListLabel.html("Visible metadata: ");
1210 editBar.append(metadataListLabel);
1211 editBar.append(visibleMetadataList);
1212 visibleMetadataList.change(onVisibleMetadataSetChange);
1213 editBar.append("<br>");
1214 for (var i=0; i< save_and_rebuild_buttons.length; i++) {
1215 var button_type = save_and_rebuild_buttons[i];
1216 if (button_type == "save") {
1217 var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"});
1218 saveButton.click(save);
1219 saveButton.html(save_button_text);
1220 editBar.append(saveButton);
1221 } else if(button_type == "rebuild") {
1222 var rebuildButton = $("<button>", {"id": "rebuildButton", "class": "ui-state-default ui-corner-all"});
1223 rebuildButton.click(rebuildCurrentCollection);
1224 rebuildButton.html(rebuild_button_text);
1225 editBar.append(rebuildButton);
1226 } else if (button_type == "saveandrebuild") {
1227 var saveAndRebuildButton = $("<button>", {"id": "saveAndRebuildButton", "class": "ui-state-default ui-corner-all"});
1228 saveAndRebuildButton.click(saveAndRebuild);
1229 saveAndRebuildButton.html(save_and_rebuild_button_text);
1230 editBar.append(saveAndRebuildButton);
1231
1232 }
1233 }
1234 var statusBarDiv = $("<div>");
1235 editBar.append(statusBarDiv);
1236 _statusBar = new StatusBar(statusBarDiv[0]);
1237
1238 var titleDivs = $(".sectionTitle");
1239 for(var i = 0; i < titleDivs.length; i++)
1240 {
1241 addEditMetadataLink(titleDivs[i]);
1242 }
1243
1244 _baseURL = gs.xsltParams.library_name;
1245 onVisibleMetadataSetChange(); // make sure that the selected item in the list is active
1246}
1247
1248// override the one in documentmaker_scripts_util
1249// currently not used if other one is present. need to get the js include order right
1250function enableSaveButtons(enabled) {
1251 if (enabled) {
1252 $("#saveButton, #rebuildButton, #saveAndRebuildButton").removeAttr("disabled");
1253 } else {
1254 $("#saveButton, #rebuildButton, #saveAndRebuildButton").attr("disabled", "disabled");
1255 }
1256}
1257
1258/* this is a cut down version of save() from documentmaker_scripts_util.js
1259 going back to using save, will delete this once everything working*/
1260function saveMetadataChangesOld() {
1261
1262 console.log("Saving metadata changes");
1263
1264 // get collection name
1265 var collection = gs.cgiParams.c;;
1266
1267 // get document id
1268 var docID = gs.cgiParams.d;
1269
1270 var metadataChanges = new Array();
1271 if (_deletedMetadata.length > 0) {
1272
1273 for(var i = 0; i < _deletedMetadata.length; i++) {
1274
1275 var currentRow = _deletedMetadata[i];
1276
1277 //Get metadata name
1278 var cells = currentRow.getElementsByTagName("TD");
1279 var nameCell = cells[0];
1280 var name = nameCell.innerHTML;
1281 var valueCell = cells[1];
1282 var value = valueCell.innerHTML;
1283 metadataChanges.push({type:'delete', docID:docID, name:name, value:value});
1284 removeFromParent(currentRow);
1285 }
1286 }
1287
1288 var changes = de.Changes.getChangedEditableSections();
1289 for(var i = 0; i < changes.length; i++) {
1290
1291 var changedElem = changes[i];
1292
1293 //Get metadata name
1294 var row = changedElem.parentNode;
1295 var cells = row.getElementsByTagName("TD");
1296 var nameCell = cells[0];
1297 var name = nameCell.innerHTML;
1298 var value = changedElem.innerHTML;
1299 value = value.replace(/&nbsp;/g, " ");
1300
1301 var orig = changedElem.originalValue;
1302 if (orig) {
1303 orig = orig.replace(/&nbsp;/g, " ");
1304 }
1305 metadataChanges.push({collection:collection, docID:docID, name:name, value:value, orig:orig});
1306 changedElem.originalValue = changedElem.innerHTML;
1307
1308 }
1309
1310 if (metadataChanges.length ==0) {
1311 console.log ("... No changes detected. ");
1312 return;
1313 }
1314
1315 var processChangesLoop = function(index)
1316 {
1317 var change = metadataChanges[index];
1318
1319 var callbackFunction;
1320 if(index + 1 == metadataChanges.length)
1321 {
1322 callbackFunction = function(){console.log("Completed saving metadata changes. You must rebuild the collection for the changes to take effect.");};
1323 }
1324 else
1325 {
1326 callbackFunction = function(){processChangesLoop(index + 1)};
1327 }
1328 if (change.type == "delete") {
1329 gs.functions.removeArchivesMetadata(collection, gs.xsltParams.site_name, change.docID, change.name, null, change.value, function(){callbackFunction();});
1330 } else {
1331 if(change.orig)
1332 {
1333 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, change.orig, "override", function(){callbackFunction();});
1334 }
1335 else
1336 {
1337 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, null, "accumulate", function(){callbackFunction();});
1338 }
1339 }
1340 }
1341 processChangesLoop(0);
1342 /* need to clear the changes from the page */
1343 de.Changes.clear();
1344 while (_deletedMetadata.length>0) {
1345 _deletedMetadata.pop();
1346 }
1347
1348}
1349
1350
1351
1352
1353
1354/***************
1355* MENU SCRIPTS *
1356***************/
1357function moveScroller() {
1358 var move = function() {
1359 var editbar = $("#editBar");
1360 var st = $(window).scrollTop();
1361 var fa = $("#float-anchor").offset().top;
1362 if(st > fa) {
1363
1364 editbar.css({
1365 position: "fixed",
1366 top: "0px",
1367 width: editbar.data("width"),
1368 //width: "30%"
1369 });
1370 } else {
1371 editbar.data("width", editbar.css("width"));
1372 editbar.css({
1373 position: "relative",
1374 top: "",
1375 width: ""
1376 });
1377 }
1378 };
1379 $(window).scroll(move);
1380 move();
1381}
1382
1383
1384function floatMenu(enabled)
1385{
1386 var menu = $(".tableOfContentsContainer");
1387 if(enabled)
1388 {
1389 menu.data("position", menu.css("position"));
1390 menu.data("width", menu.css("width"));
1391 menu.data("right", menu.css("right"));
1392 menu.data("top", menu.css("top"));
1393 menu.data("max-height", menu.css("max-height"));
1394 menu.data("overflow", menu.css("overflow"));
1395 menu.data("z-index", menu.css("z-index"));
1396
1397 menu.css("position", "fixed");
1398 menu.css("width", "300px");
1399 menu.css("right", "0px");
1400 menu.css("top", "100px");
1401 menu.css("max-height", "600px");
1402 menu.css("overflow", "auto");
1403 menu.css("z-index", "200");
1404
1405 $("#unfloatTOCButton").show();
1406 }
1407 else
1408 {
1409 menu.css("position", menu.data("position"));
1410 menu.css("width", menu.data("width"));
1411 menu.css("right", menu.data("right"));
1412 menu.css("top", menu.data("top"));
1413 menu.css("max-height", menu.data("max-height"));
1414 menu.css("overflow", menu.data("overflow"));
1415 menu.css("z-index", menu.data("z-index"));
1416
1417 $("#unfloatTOCButton").hide();
1418 $("#floatTOCToggle").attr("checked", false);
1419 }
1420
1421 var url = gs.xsltParams.library_name + "?a=d&ftoc=" + (enabled ? "1" : "0") + "&c=" + gs.cgiParams.c;
1422
1423 $.ajax(url);
1424}
1425
1426/********************
1427* SLIDESHOW SCRIPTS *
1428********************/
1429
1430function showSlideShow()
1431{
1432 if(!($("#gs-slideshow").length))
1433 {
1434 var slideshowDiv = $("<div>", {id:"gs-slideshow", style:"height:100%;"});
1435 var loadingImage = $("<img>", {src:gs.imageURLs.loading});
1436 slideshowDiv.append(loadingImage);
1437
1438 $.blockUI({message: $(slideshowDiv), css:{top: "5%", left: "5%", width: "90%", height: "90%", overflow: "auto", cursor: "auto"}});
1439
1440 retrieveImagesForSlideShow(function(imageIDArray)
1441 {
1442 loadingImage.hide();
1443 if(imageIDArray && imageIDArray.length > 0)
1444 {
1445 var imageURLs = new Array();
1446 for(var i = 0; i < imageIDArray.length; i++)
1447 {
1448 if(imageIDArray[i].source && imageIDArray[i].source.search(/.*\.(gif|jpg|jpeg|png)$/) != -1)
1449 {
1450 imageURLs.push(gs.collectionMetadata.httpPath + "/index/assoc/" + gs.documentMetadata.assocfilepath + "/" + imageIDArray[i].source);
1451 }
1452 }
1453 new SlideShowWidget(slideshowDiv, imageURLs, imageIDArray);
1454 }
1455 });
1456 }
1457 else
1458 {
1459 $("#gs-slideshow").show();
1460 }
1461}
1462
1463function retrieveImagesForSlideShow(callback)
1464{
1465 var template = "";
1466 template += '<xsl:template match="/">';
1467 template += '<images>[';
1468 template += '<xsl:for-each select="//documentNode">';
1469 template += '<xsl:text disable-output-escaping="yes">{"source":"</xsl:text><gsf:metadata name="Source"/><xsl:text disable-output-escaping="yes">",</xsl:text>';
1470 template += '<xsl:text disable-output-escaping="yes">"id":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">"}</xsl:text>';
1471 template += '<xsl:if test="position() != count(//documentNode)">,</xsl:if>';
1472 template += '</xsl:for-each>';
1473 template += ']</images>';
1474 template += '</xsl:template>';
1475
1476 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + gs.cgiParams.d + "?ed=1&ilt=" + template.replace(" ", "%20");
1477
1478 $.ajax(
1479 {
1480 url:url,
1481 success: function(data)
1482 {
1483 var startIndex = data.indexOf(">", data.indexOf(">") + 1) + 1;
1484 var endIndex = data.lastIndexOf("<");
1485 var arrayString = data.substring(startIndex, endIndex);
1486 var imageIDArray = eval(arrayString);
1487
1488 callback(imageIDArray);
1489 }
1490 });
1491}
1492
1493function SlideShowWidget(mainDiv, images, idArray)
1494{
1495 var _inTransition = false;
1496 var _images = new Array();
1497 var _mainDiv = mainDiv;
1498 var _imageDiv = $("<div>", {id:"ssImageDiv", style:"height:95%; overflow:auto;"});
1499 var _navDiv = $("<div>", {style:"height:5%;"});
1500 var _nextButton = $("<img>", {src:gs.imageURLs.next, style:"float:right; cursor:pointer;"});
1501 var _prevButton = $("<img>", {src:gs.imageURLs.prev, style:"float:left; cursor:pointer; display:none;"});
1502 var _closeLink = $("<a href=\"javascript:$.unblockUI()\">Close Slideshow</a>");
1503 var _clearDiv = $("<div>", {style:"clear:both;"});
1504 var _currentIndex = 0;
1505
1506 _navDiv.append(_nextButton);
1507 _navDiv.append(_closeLink);
1508 _navDiv.append(_prevButton);
1509 _navDiv.append(_clearDiv);
1510 _mainDiv.append(_navDiv);
1511 _mainDiv.append(_imageDiv);
1512
1513 for(var i = 0; i < images.length; i++)
1514 {
1515 _images.push($("<img>", {src:images[i], "class":"slideshowImage"}));
1516 }
1517
1518 if(_images.length < 2)
1519 {
1520 _nextButton.css("display", "none");
1521 }
1522
1523 _imageDiv.append(_images[0]);
1524
1525 this.nextImage = function()
1526 {
1527 if(!_inTransition)
1528 {
1529 _inTransition = true;
1530 if((_currentIndex + 1) < _images.length)
1531 {
1532 _prevButton.css("display", "");
1533 if(_currentIndex + 1 == _images.length - 1)
1534 {
1535 _nextButton.css("display", "none");
1536 }
1537
1538 _imageDiv.fadeOut(500, function()
1539 {
1540 _imageDiv.empty();
1541 _imageDiv.append(_images[_currentIndex + 1]);
1542 _currentIndex++;
1543 _imageDiv.fadeIn(500, function()
1544 {
1545 _inTransition = false;
1546 });
1547 });
1548 }
1549 else
1550 {
1551 _inTransition = false;
1552 }
1553 }
1554 }
1555
1556 this.prevImage = function()
1557 {
1558 if(!_inTransition)
1559 {
1560 _inTransition = true;
1561 if((_currentIndex - 1) >= 0)
1562 {
1563 _nextButton.css("display", "");
1564 if(_currentIndex - 1 == 0)
1565 {
1566 _prevButton.css("display", "none");
1567 }
1568
1569 _imageDiv.fadeOut(500, function()
1570 {
1571 _imageDiv.empty();
1572 _imageDiv.append(_images[_currentIndex - 1]);
1573 _currentIndex--;
1574 _imageDiv.fadeIn(500, function()
1575 {
1576 _inTransition = false;
1577 });
1578 });
1579 }
1580 else
1581 {
1582 _inTransition = false;
1583 }
1584 }
1585 }
1586
1587 var getRootFilenameFromURL = function(url)
1588 {
1589 var urlSegments = url.split("/");
1590 var filename = urlSegments[urlSegments.length - 1];
1591 return filename.replace(/_thumb\..*$/, "");
1592 }
1593
1594 var setLink = function(currentLink, index)
1595 {
1596 $(currentLink).click(function()
1597 {
1598 _inTransition = true;
1599 _currentIndex = index;
1600 _imageDiv.fadeOut(500, function()
1601 {
1602 _imageDiv.empty();
1603 _imageDiv.append(_images[_currentIndex]);
1604 _imageDiv.fadeIn(500, function()
1605 {
1606 _inTransition = false;
1607 });
1608 });
1609 });
1610 }
1611
1612 var sliderLinks = $(".pageSliderCol a");
1613 for(var i = 0; i < sliderLinks.length; i++)
1614 {
1615 var currentLink = sliderLinks[i];
1616 var id = $(currentLink).attr("href").split("'")[1];
1617
1618 for(var j = 0; j < idArray.length; j++)
1619 {
1620 if(idArray[j].id == id)
1621 {
1622 var image = idArray[j].source;
1623
1624 for(var l = 0; l < images.length; l++)
1625 {
1626 var filename = getRootFilenameFromURL(images[l]);
1627 if (filename == image)
1628 {
1629 setLink(currentLink, l);
1630 break;
1631 }
1632 }
1633
1634 break;
1635 }
1636 }
1637 }
1638
1639 _nextButton.click(this.nextImage);
1640 _prevButton.click(this.prevImage);
1641}
Note: See TracBrowser for help on using the repository browser.