/** * Copyright (c) 2009-2010, As Is Software, dba Media Lab Inc. * http://www.medialab.com */ var com; if(!com) { com = {}; } else if(typeof(com) != "object") { throw new Error("can't initialize...com is not an object."); } if(!com.medialab) { com.medialab = {}; } else if(typeof(com.medialab) != "object") { throw new Error("can't initialize...com.medialab is not an object."); } if(!com.medialab.sg) { com.medialab.sg = {}; } if (!com.medialab.sg.gallery1) { com.medialab.sg.gallery1 = {}; } com.medialab.sg.gallery1.pictureboxSiteGrinderCSSAnim = function(pictureboxXMLIn, docentIn){ var that = this; var debug = false; var sgalert = function(msg){ if (debug) { alert(msg); } }; var docent = docentIn; var xml = pictureboxXMLIn; var myWidth = 0; var myHeight = 0; var myDivID = "not set yet"; var myClickAction = "not set yet"; var myHoverAction = "not set yet"; var rightClickBlock = false; var curImageUrl = "not set yet"; var halfPreloader = 15; var preloadImgHTML = null; var exhibitArray = []; var fadeTime = 500; var delay = 5000; var goNextTimerID = null; var checkLoadTimerID = null; var autoPlay = false; var endAction = 'loop'; var endUrl = 'index.html'; var viewDiv = null; var pboxAlign = "not set yet"; function getPictureboxQuery() { // sample : '#divname img' return '#'+myDivID+' img'; } this.getRightClickBlock = function () { return rightClickBlock; } this.displayByUrl = function(imageUrl) { var pbq = getPictureboxQuery(); //$ml(pbq).attr('src', imageUrl); } this.displayByNum = function(exhibitNum, viewNum) { docent.sgconsole('CSS PICTUREBOX displayByNum()'); autoPlayed = false; if (viewNum != 0) { autoPlay = false; } gotoPicNum(exhibitNum,viewNum); //this.displayByUrl(getUrlFromNum(exhibitNum,viewNum)); } function getUrlFromNum(exhibitNum, viewNum){ return $ml('exhibits exhibit:eq('+ exhibitNum +') views view:eq('+ viewNum +') picturebox url',xml).text(); } function getPictureDiv(urlIn) { var left = 0; var top = 0; var cursorString = ""; if(myClickAction!="none") { cursorString="cursor:pointer;"; } return ""; } /* function startShow() { $ml('#'+myDivID+' img:eq(0)').css('display','block'); setInterval(function(){ $ml('#'+myDivID+' :first-child').fadeOut() .next('img').fadeIn() .end().appendTo('#'+myDivID);}, 6000); } */ function gotoPicNum(exhibitNum, viewNum) { clearTimeout(goNextTimerID); if(typeof viewNum == 'undefined') { viewNum = 0; } if (exhibitNum <= exhibitArray.length - 1) { var imageHero = exhibitArray[exhibitNum].images[viewNum]; if(typeof imageHero == 'undefined') { //if(typeof imageHero == 'undefined') { exhibitArray[exhibitNum].images[viewNum] = new Object(); exhibitArray[exhibitNum].images[viewNum].img = new Image(); exhibitArray[exhibitNum].images[viewNum].img.src = getUrlFromNum(exhibitNum,viewNum); exhibitArray[exhibitNum].images[viewNum].aligned = false; exhibitArray[exhibitNum].images[viewNum].html = $ml(getPictureDiv(exhibitArray[exhibitNum].images[viewNum].img.src)); imageHero = exhibitArray[exhibitNum].images[viewNum]; //} } if (!imageHero.img.width!=0) { goNextTimerID = setTimeout(function(){ gotoPicNum(exhibitNum,viewNum); exhibitNum = null; }, 10); } else { if (!imageHero.aligned) { alignInPicturebox(imageHero); } setNextImgHTML(imageHero.html); $ml(getDivContainerString() + ' :first-child') .fadeOut(fadeTime, function(){fadeDone(exhibitNum);}) .next('img').fadeIn(fadeTime) .end().appendTo(getDivContainerString()); if (autoPlayed) { docent.pictureboxSelectByNum(exhibitNum, false); } } } // viewDiv = $ml(getPictureDiv(getUrlFromNum(nextNum,nextView))); } /* // This one works well without views function gotoPicNum(nextNum) { clearTimeout(goNextTimerID); if (nextNum <= imgArray.length - 1) { if (!imgArray[nextNum].img.complete) { goNextTimerID = setTimeout(function(){ gotoPicNum(nextNum); nextNum = null; }, 10); } else { if (!imgArray[nextNum].centered) { centerInPicturebox(nextNum); } setNextImgHTML(imgArray[nextNum].html); $ml('#' + myDivID + ' :first-child') .fadeOut(fadeTime, function(){fadeDone(nextNum);nextNum=null;}) .next('img').fadeIn(fadeTime) .end().appendTo('#' + myDivID); if (autoPlayed) { docent.pictureboxSelectByNum(nextNum, false); } } } // viewDiv = $ml(getPictureDiv(getUrlFromNum(nextNum,nextView))); } */ function alignInPicturebox(imageObjToAlign) { var pboxWidth = $ml('#'+myDivID).width(); var pboxHeight = $ml('#'+myDivID).height(); // assume center h & v var top = Math.floor(pboxHeight/2) - Math.floor(imageObjToAlign.img.height/2); var left = Math.floor(pboxWidth/2) - Math.floor(imageObjToAlign.img.width/2); // check for non centered if(pboxAlign.indexOf("left") != -1) { left = 0; } if(pboxAlign.indexOf("right") != -1) { left = pboxWidth-imageObjToAlign.img.width; } if(pboxAlign.indexOf("top") != -1) { top = 0; } if(pboxAlign.indexOf("bottom") != -1) { top = pboxHeight-imageObjToAlign.img.height; } imageObjToAlign.html.css('top',top+'px'); imageObjToAlign.html.css('left',left+'px'); imageObjToAlign.aligned = true; } function setNextImgHTML(htmlIn) { $ml(getDivContainerString() + ' :eq(1)').remove(); htmlIn.appendTo(getDivContainerString()); } function fadeDone(replacedByNum) { var targetNum = replacedByNum + 1; if (autoPlay) { if (targetNum == docent.getExhibitCount()) { if (endAction == 'loop') { targetNum = 0; } else { if(endAction=='gotourl') { if(endUrl!=null && endUrl!='') { docent.gotoUrl(endUrl); } } } } autoPlayNext(targetNum); } } function preload() { for(var curSlide = 0; curSlide < docent.getExhibitCount(); curSlide++) { var victim = new Object(); victim.images = []; victim.images[0] = new Object(); victim.images[0].img = new Image(); var imgSrc = getUrlFromNum(curSlide,0); victim.images[0].img.src = imgSrc; victim.images[0].html = $ml(getPictureDiv(imgSrc)); victim.images[0].positioned = false; exhibitArray[curSlide] = victim; } checkLoad(); } function autoPlayNext(nextToPlay) { autoPlayed = true; clearTimeout(goNextTimerID); goNextTimerID = setTimeout(function(){ gotoPicNum(nextToPlay); nextToPlay = null; }, delay); } function checkLoad() { var startImgNum = docent.getCurrentExhibit(); var nextImgNum = docent.getCurrentExhibit()+1; if(nextImgNum == docent.getExhibitCount()) { nextImgNum = 0; } if (typeof exhibitArray[startImgNum] != "undefined" && typeof exhibitArray[nextImgNum] != "undefined") { if (exhibitArray[startImgNum].images[0].img.width != 0 && exhibitArray[nextImgNum].images[0].img.width != 0) { alignInPicturebox(exhibitArray[startImgNum].images[0]); preloadImgHTML.remove(); exhibitArray[startImgNum].images[0].html.appendTo(getDivContainerString()); exhibitArray[nextImgNum].images[0].html.appendTo(getDivContainerString()); exhibitArray[startImgNum].images[0].html.fadeIn(fadeTime); if (autoPlay) { autoPlayNext(nextImgNum); } } else { checkLoadTimerID = setTimeout(checkLoad, 10) } } } function getDivContainerString() { return '#' + myDivID + ' > div'; } function initPictureBox() { var ptop = Math.floor(myHeight/2) - halfPreloader; var pleft = Math.floor(myWidth/2) - halfPreloader; preloadImgHTML= $ml(""); var container = $ml('
'); preloadImgHTML.appendTo(container); container.appendTo('#'+myDivID); preload(); docent.sgconsole('made thumbs... '); var exhibitToShow = 0; if(rightClickBlock) { docent.sgconsole('3 disabling right click'); $ml(getDivContainerString()).bind("contextmenu",function(e){ alert('Context menu disabled for this image.'); return false; } ); } if (myClickAction != "none") { $ml(getDivContainerString()).bind('click',function(event){myClick(event);}); } } function myClick(e) { docent.sgconsole("picturebox clicked"); docent.pictureboxClick(true,null); return false; } function init() { sgalert("SG Standard Picturebox: Init", this); if(getOption("type")!="animatedcss") { alert("Type mismatch between picturebox javascript and data!"); return;} if(getOption("version") > 1.0) { alert("Picturebox javascript version older than data version!"); return;} processXML(); initPictureBox(); } function processXML () { sgalert("SG Standard Picturebox: processXML", this); numExhibits = docent.getExhibitCount(); myWidth = getOption("width"); myHeight = getOption("height"); myDivID = getOption("divname"); pboxAlign = getOption("alignment"); rightClickBlock = getOption("rightclickblock"); myClickAction = getOption("clickaction"); myHoverAction = getOption("hoveraction"); fadeTime = getOption("autoadvancedtransitiontimeseconds")*1000; delay = getOption("autoadvancedelayseconds")*1000; autoPlay = getOption("autoadvance"); endAction = getOption("endaction"); endUrl = getOption("endurl"); return; } function getOption(opt) { return docent.getPictureboxOption(opt); //var w = $ml('options > picturebox > option[varname='+opt+']', xml).attr("value"); } init(); }