/* NOTES: 3. Allow switch of links to a "Photo x of y" label. 7. Move generic functions (cookies, findObj) to own lib. 9. Experiment with the large loads (e.g. ALL PHOTOS SLIDESHOW) for interruption issues. (Seem to be OK) 10. Small bug when switching sizes if images not all loaded yet. Need to redraw links. DONE! 11. Keep buttons static at the top of the page even when scrolling a window: ref http://javascriptkit.com/javatutors/static3.shtml 12. BUG! If image is NOT AVAILABLE navigation hangs. loadit() must get stuck at that point. 13. BUG! Blend mode is not disabled if slideshow stopped/started after stopping loading. When loading and slideshowing if blend mode was checked it shows "disabled" and "checked" and is still operable. If blend mode disabled, don't blend even if checked. Easy fix. */ function findObj(theObj, theDoc) { var p, i, foundObj; if(!theDoc) theDoc = document; if( (p = theObj.indexOf("?")) > 0 && parent.frames.length) { theDoc = parent.frames[theObj.substring(p+1)].document; theObj = theObj.substring(0,p); } if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj]; for (i=0; !foundObj && i < theDoc.forms.length; i++) foundObj = theDoc.forms[i][theObj]; for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++) foundObj = findObj(theObj,theDoc.layers[i].document); if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj); return foundObj; } // Examples: myIdx("theimage") or myIdx(0,"cap") // 2nd form concatenates and returns id, e.g. "cap0" or "CAP0" for large images (size="l") // Note: objects are not instantiated until after loading function myIdx(id,pfx) { if ( isNaN(id) ) { return id; // not an integer, so accept it as the tag ID. } else if ( size=="l" ) { // for large images the tag ID is uppercased var uc=pfx.toUpperCase(); if ( uc == "CAP" || uc == "D" || uc == "I" ) pfx = uc; } var res = pfx + id; return res.toString() } function findMyObj(i,pfx) { var ID = myIdx(i,pfx); var obj = findObj(ID); //ok = obj ? " found":" not found"; if ( !obj ) alert( "findMyObj: Object" + ok + " ID='" + ID + "'") return obj } function setInnerHTML() { // Usage: setInnerHTML(i,pfx,value) // Alt: setInnerHTML(id,value) var obj; var args=setInnerHTML.arguments; if ( args.length == 3 ) { obj = findMyObj(args[0],args[1]); if ( !obj ) return false; obj.innerHTML=args[2]; } else { obj = findObj(args[0]); if ( !obj ) return false; obj.innerHTML=args[1]; } return true; } function getInnerHTML(i,pfx) { // Usage: getInnerHTML(i,pfx) // Alt: getInnerHTML(id) var obj = findMyObj(i,pfx); if ( obj ) return obj.innerHTML; return ""; } function wrMsgCat() { // same as wrMsg but concatenates to the object contents var args = wrMsgCat.arguments var msgID; if ( args.length == 3 && !args[2] ) return true; // used for debug flag, exit if flag is false if ( args.length == 1 ) msg = ""; else msg = args[1]; msgID=args[0]; msg = getInnerHTML(msgID,"msg") + msg; return setInnerHTML(msgID,"msg",msg); } function wrMsg() { // wrMsg(i,[,msg,[,flag]]) -- modifies innerHTML of object with id="msg{i}" to value of "msg" // wrMsg(msgID,[,msg,[,flag]]) -- modifies innerHTML of object with id="msgID" to value of "msg" // if flag is false; var args = wrMsg.arguments; var msgID; if ( args.length == 3 && !args[2] ) return true; // used for debug flag, exit if flag is false if ( args.length == 1 ) msg = ""; else msg = args[1]; msgID=args[0]; return setInnerHTML(msgID,"msg",msg); } // Example: showHideLayers(Layer1_idnbr,'show',Layer2_idnbr,'hide'); function showHideLayers() { var i, visStr, obj, id var args = showHideLayers.arguments; for (i=0; i<(args.length-1); i+=2) { var idnbr = args[i]; if ( isNaN(idnbr) ) id = args[i].toString() else id = myIdx(idnbr,"d") if ((obj = findObj(id)) != null) { visStr = args[i+1]; if (obj.style) { obj = obj.style; if(visStr == 'show') visStr = 'visible'; else if(visStr == 'hide') visStr = 'hidden'; } obj.visibility = visStr; } } } function setDex(idx) { // Get description for this image, make initial bold a title by adding
, set to class "caption" var dex = ImgDexAr[idx]; dex = dex.replace(/^(.*?<\/strong>)/,"$1
"); dex = dex.replace(/^(.*)$/,"
$1
"); return dex; } function show() { // show current image as defined in CurIdx var filtersupport = false; var theimgobj = findObj("theimg"); var img = findMyObj(CurIdx,"i"); //msg="Photo #" + (1+CurIdx) + " of " + ImgNameAr.length // msg += ". img.id=" + img.id // msg += ". Size: " + img.width + "W x " + img.height + "H"; // msg+="CurIdx=" + CurIdx +" LastIdx="+LastIdx; //wrMsg("photoid",msg); document.title = Title + " Gallery. Current image:" + img.alt //wrMsg(2,"Complete: " + img.complete + " Loaded:" + ImagesLoaded[size][CurIdx] + " All:" +AllImagesLoaded[size] + " H=" + img.height ) if ( ImagesLoaded[size][CurIdx] && !img.complete && AllImagesLoaded[size] ) { // we have a load failure, skip this image setLinkStyle(CurIdx,false); return } var blendBox = findObj("blended") var blend = blendBox && showslide && blendBox.checked==1 if ( blend ) { theimgobj = findObj("theimg"); var filtersupport = theimgobj.filters //check for support for filters } if ( filtersupport ) { showHideLayers('theimage','show',CurIdx,'hide',LastIdx,'hide',0,'hide'); startup = false; var blenddelay = (filtersupport)? theimgobj.filters[0].duration*500 : 0 theimgobj.filters[0].apply() theimgobj.src = img.src; theimgobj.alt = img.alt; //wrMsg(1,theimgobj.src) theimgobj.filters[0].play(); var dex = setDex(CurIdx); setInnerHTML("theimagecap",dex); } else { if ( LastIdx != CurIdx ) showHideLayers(LastIdx,'hide'); showHideLayers(CurIdx,'show','theimage','hide') } setLinkStyle (CurIdx,true); if ( CurIdx != LastIdx ) setLinkStyle(LastIdx,ImagesLoaded[size][LastIdx]) LastIdx = CurIdx; } function disableButtons(disabled,exclude) { var i, buttonObj; for ( i=0; i 0 ) { showslide = slideshow.arguments[0] } else { showslide = !showslide; } if ( showslide ) { document.forms.theform.slidebutton.value="Stop Slideshow" if ( browser.isIE ) { // preload var theimg = findObj("theimg"); var img = findMyObj(CurIdx,"i"); theimg.src = img.src theimg.alt = img.alt } ss(); } else { document.forms.theform.slidebutton.value="Start Slideshow" } } function ss() { if ( !showslide ) { if ( timerID ) clearTimeout(timerID); timerID=0; startup = true; setDisplayByName("angle_icon","inline-block") return true; } else { setDisplayByName("angle_icon","none") } var obj = findMyObj(LastIdx,"i"); if ( setNextImage(slidedir) ) show(CurIdx,slidedir) timerID=setTimeout("ss()",slidespeed*1000); return true; } function wrapIdx(i) { var n = ImgNameAr.length; return (i < 0) ? n-1 : ((i >= n) ? 0 : i); } function setNextImage(dir) { // find next image to display (dir = fwd|bak|neutral var msg; var obj = findMyObj(LastIdx,"i"); if ( ImagesLoaded[size][CurIdx] ) { if ( !obj || !obj.complete ) return false; } if ( !AtLeastOneLoaded ) return false; if ( slidedir == bak && showslide ) dir = bak; if ( size == " ql" ) repl="_wl" else if ( size == "s" ) repl="_ws" switch ( dir ) { case fwd: CurIdx = CurIdx+1; break; case bak: CurIdx = CurIdx-1; break; case neutral: default: break; } CurIdx = wrapIdx(CurIdx); // if not loaded keep going until a loaded image is found if ( !ImagesLoaded[size][CurIdx] ) { if ( dir==neutral ) dir = bak; setNextImage(dir); } NextIdx = wrapIdx(CurIdx+1); PrevIdx = wrapIdx(CurIdx-1); if ( slidedir == bak && showslide ) { // swap if reverse direction i = PrevIdx PrevIdx = NextIdx NextIdx = i } obj = findObj("prevbutton"); //alert ( obj ? 'Good '+obj.name : 'Bad') obj.value = CurIdx == 0 ? "Last" : "Prev"; obj = findObj("nextbutton"); obj.value = CurIdx == ImgNameAr.length-1 ? "First" : "Next"; return true } function showNextImage(dir) { if ( setNextImage(dir) ) show() } loadTimerId =0; loadingIdx = 0; loadingAr = new Array(); function loadtherest() { var ar = new Array(); var i, j; var theimg = findObj("theimg"); if ( !theimg ) return false; if ( theimg.filters ) showHideLayers('cbox','show') for ( i=1; i0 if ( AbortLoad[size] ) { if (loadTimerId) clearTimeout(loadTimerId); loadTimerId=0; return true; } if ( starting ) { var i = loadingAr.pop(); // get next image index to load //if ( typeof(i) == "undefined") return; loadingIdx = i; var imgtype = ImgTypeAr[loadingIdx]; if ( size == "l" ) { capkey = "CAP" imgkey = "I" //alert("Loading Idx: " + loadingIdx + " type: " + imgtype) repl= ( imgtype > 1 ) ? "_wl" : "_ws" ; } else if ( imgtype > 0 ) { capkey = "cap" imgkey = "i" repl="_ws" } } if ( AllImagesLoaded[size] ) { showHideBlendBox(SHOW); showHideLayers("loadcontrol","hide"); } var obj = findMyObj(loadingIdx,imgkey); if ( !obj ) { return false; } /* var w = obj.width; var h = obj.height s = starting ?"Starting":"continuing" s = "Img #"+loadingIdx +" "+s+" obj.src="+obj.src + " obj.id=" + obj.id; s += " " +w+"W "+h+"H " wrMsg(loadingIdx,s); */ //var ok=confirm(s); if ( !ok ) { clearTimeout(loadTimerId); return; } if ( starting && (!obj.complete || !obj.src) ) { //var ok=confirm("Starting."); if ( !ok ) { clearTimeout(loadTimerId); return; } obj.onLoad = setLoaded(size,loadingIdx); obj.src = ImgNameAr[loadingIdx].replace("_tn",repl);; obj.alt = ImgNameShortAr[loadingIdx].replace("_tn",repl); var dex = setDex(loadingIdx); setInnerHTML(loadingIdx,capkey,dex); } if ( obj.complete ) { //var ok=confirm("Loading completed for image #"+loadingIdx); if ( !ok ) { clearTimeout(loadTimerId); return; } //s = s + ". Loading completed for image #"+loadingIdx //var w = obj.width; //var h = obj.height //s += " " +w+"W "+h+"H " //wrMsg(loadingIdx,s) //setLoaded(size,loadingIdx); if (loadTimerId) clearTimeout(loadTimerId); loadTimerId=0; loaditer=0; if ( loadingAr.length > 0 ) loadit(starting); else return; } // //wrMsg(0,loaditer++); loadTimer = setTimeout("loadit()",50); } function getFromSearch() { // Returns GET variables var i = 0 var mySearch = location.search.substr(1).split("&") for (i=0;i tag return value, set default, set cookie // arg 2 sets selection and value instead of from select var select_elem = findObj(mySelectName) var lowval = select_elem.options[0].value var val; if ( arguments.length == 2 ) val = arguments[1] else val = select_elem.options[select_elem.selectedIndex].value; select_elem.options[val-lowval].selected = true; if ( testPersistentCookie() ) writePersistentCookie (Title+mySelectName, val, "years", 1) return val } function shiftsize() { var b = findObj("sizebutton"); var imgobj = findObj("theimg"); showHideLayers("placeholder",'show',CurIdx,'hide') // swap sizes if ( size == "s" ) { size = "l" b.value = "Smaller" } else if ( size == "l" ) { size = "s"; b.value = "Larger" } resize(size); for ( i=0; i