//ceebox /* * Ceebox 1.3.3 * Requires jQuery 1.3.2 and swfobject.jquery.js plugin to work * Code hosted on GitHub (http://github.com/catcubed/CeeBox) Please visit there for version history information * By Colin Fahrion (http://www.catcubed.com) * Adapted from Thickbox (http://jquery.com/demo/thickbox/) Copyright (c) 2007 Cody Lindley (http://www.codylindley.com) * Video pop-up code inspired by Videobox (http://videobox-lb.sourceforge.net/) * Copyright (c) 2009 Colin Fahrion * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php */ // BASE SETTINGS - Edit to your liking // path to loading animationChange base settings below. var pathToLoadingAnim = "../images/loadinganimation.gif"; // Base Width and Height for html boxes // if set to false, size is set automatically by size of browser window. Can be set to a static size (ie, var vidBaseW = 480; var vidBaseH = 359;). var htmlBaseW = false; var htmlBaseH = false; // Base Width and Height for video boxes // if set to false, size is set automatically by size of browser window. Can be set to a static size (ie, var vidBaseW = 480; var vidBaseH = 359;). var vidBaseW = false; var vidBaseH = false; /*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/ //on page load call cee_init $(document).ready(function(){ cee_init('a.ceebox, area.ceebox, input.ceebox');//pass where to apply ceebox imgLoader = new Image();// preload image imgLoader.src = pathToLoadingAnim; /* Opera Hack. * Flash movies were not displaying properly with CeeBox under Opera. Videobox works fine, I don't know what's different. * I randomly discovered that if there is an inline element immediately under the body tag it works. * Don't ask me why but this works. Note that I have made the text invisible to hide added element. * If anyone has a better solution please let me know. I hate having to include something as hacky as this. */ if($.browser.opera){ $("body").append("lame opera hack"); } }); //add ceebox function to href & area elements that have a class of .ceebox function cee_init(domChunk){ $(domChunk).click(function(){ var t = this.title || this.name || null; var a = this.href || this.alt; var g = this.rel || false; cee_show(t,a,g); this.blur(); return false; }); } function cee_show(caption, url, rel) {//function called when the user clicks on a ceebox link try { if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 $("html").css("overflow","hidden"); if (document.getElementById("cee_HideSelect") === null) {//iframe to hide select elements in ie6 $("body").append("
"); $("#cee_overlay").click(cee_remove); } }else{//all others if(document.getElementById("cee_overlay") === null){ $("body").append("
"); $("#cee_overlay").click(cee_remove); } } //For Firefox use png overlay to hide flash otherwise use background and opacity (cee_detectMacXFF()) ? $("#cee_overlay").addClass("cee_overlayMacFFBGHack") : $("#cee_overlay").addClass("cee_overlayBG"); if(caption===null){caption="";} $("body").append("
");//add loader to the page $('#cee_load').show();//show loader var baseURL = (url.indexOf("?")!==-1) ? url.substr(0, url.indexOf("?")) : url; //grab query string if there is one var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$|\.swf$|\.htm$|\.html$|\.asp$|\.aspx$/; var urlType = baseURL.toLowerCase().match(urlString); // Size of module window for video or html var vidSize = cee_getSize(rel,vidBaseW,vidBaseH); var htmlSize = cee_getSize(rel,htmlBaseW,htmlBaseH); var urlTest = [ [(!url.match(/^http:+/) && (rel && !rel.match("iframe"))) || (rel && rel.match("ajax")) || false, "ajax"], [urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp' || false, "image"], [url.match(/youtube\.com\/watch/i) || false, "youtube"], [url.match(/metacafe\.com\/watch/i) || false, "metacafe"], [url.match(/google\.com\/videoplay/i) || false, "google"], [url.match(/ifilm\.com\/video/i) || false, "ifilm"], [url.match(/vimeo\.com/i) || false, "vimeo"], [url.match(/dailymotion\.com/i) || false, "dailymotion"], [url.match(/facebook\.com\/video/i) || false, "facebook"] ] var i = urlTest.length; var urlMatch; do { if (urlTest[i-1][0]){urlMatch = urlTest[i-1][1]; break}; } while (--i); switch (urlMatch) { case "image": cee_imagegal(url,caption,rel,urlString); break; case "facebook": var src = "http://www.facebook.com/v/"+url.split('v=')[1].split('&')[0]; var params = {wmode: "transparent",movie: src,allowFullScreen: "true",allowScriptAccess: "always",flashvars: {autoplay: true}}; cee_vidWindow(src,vidSize,caption,params); break; case "youtube": var src = "http://www.youtube.com/v/"+url.split('v=')[1].split('&')[0]+"&hl=en&fs=1&autoplay=1"; var params = {wmode: "transparent",allowFullScreen: "true",allowScriptAccess: "always"}; cee_vidWindow(src,vidSize,caption,params); break; case "metacafe": var src = "http://www.metacafe.com/fplayer/"+url.split('id=')[1].split('&')[0]+"/.swf"; var params = {wmode: "transparent"}; cee_vidWindow(src,vidSize,caption,params); break; case "google": src = "http://video.google.com/googleplayer.swf?docId="+url.split('id=')[1].split('&')[0]+"&hl=en"; params = {wmode: "transparent",allowFullScreen: "true",allowScriptAccess: "always",flashvars: {autoplay: true,playerMode: "normal",fs: true}}; cee_vidWindow(src,vidSize,caption,params); break; case "ifilm": src = "http://www.ifilm.com/efp"; params = {wmode: "transparent",flashvars: {flvbaseclip: vidId+"&"}}; cee_vidWindow(src,vidSize,caption,params); break; case "vimeo": src = "http://www.vimeo.com/moogaloop.swf?clip_id="+url.split('/')[3]+"&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"; params = {wmode: "transparent",allowFullScreen: "true",allowScriptAccess: "always"}; cee_vidWindow(src,vidSize,caption,params); break; case "dailymotion": src = "http://www.dailymotion.com/swf/"+url.split('/')[4]+"&related=0&autoplay=1"; params = {allowFullScreen: "true",allowScriptAccess: "always"}; cee_vidWindow(src,vidSize,caption,params); case "ajax": cee_ajaxWindow(url,htmlSize,caption,rel); break; default: cee_iframeWindow(url,htmlSize,caption,rel); } } catch(e) { //nothing here } } //helper functions below function cee_imagegal(url,caption,rel,urlString) { //Display images in box imgs = { pCap: "", pUrl: "", pHtml: "", nCap: "", nUrl: "", nHtml: "", count: "", fUrl: false } if(rel){ cee_TempArray = $("a[rel="+rel+"]").get(); for (i = 0; ((i < cee_TempArray.length) && (imgs.nHtml === "")); i++) { var urlTypeTemp = cee_TempArray[i].href.toLowerCase().match(urlString); if (!(cee_TempArray[i].href == url)) { if (imgs.fUrl) { imgs.nCap = cee_TempArray[i].title; imgs.nUrl = cee_TempArray[i].href; imgs.nHtml = "  Next >"; } else { imgs.pCap = cee_TempArray[i].title; imgs.pUrl = cee_TempArray[i].href; imgs.pHtml = "  < Prev"; } } else { imgs.fUrl = true; imgs.count = "Image " + (i + 1) +" of "+ (cee_TempArray.length); } } } imgPreloader = new Image(); imgPreloader.onload = function(){ imgPreloader.onload = null; // Resizing large images var pagesize = cee_getPageSize(); var x = pagesize[0] - 150; var y = pagesize[1] - 150; var imgW = imgPreloader.width; var imgH = imgPreloader.height; if (imgW > x) { imgW = x; imgH = imgH * (x / imgW); }; if (imgH > y) { imgW = imgW * (y/imgH); imgH = y; }; // End Resizing $("#cee_window").append(""+caption+"" + "
"+caption+"
" + imgs.count + imgs.pHtml + imgs.nHtml + "
close or Esc Key
"); $("#cee_closeWindowButton").click(cee_remove); if (imgs.pHtml != "") { function goPrev(){ document.onkeydown = null; if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);} $("#cee_window").remove(); $("body").append("
"); cee_show(imgs.pCap, imgs.pUrl, rel); return false; } $("#cee_prev").click(goPrev); } if (imgs.nHtml != "") { function goNext(){ document.onkeydown = null; $("#cee_window").remove(); $("body").append("
"); cee_show(imgs.nCap, imgs.nUrl, rel); return false; } $("#cee_next").click(goNext); } document.onkeydown = function(e){ e = e || window.event; var code = e.keyCode || e.which; if(code == 27){ // close cee_remove(); } else if(code == 190 || code == 39 && imgs.nHtml != ""){ // display next image goNext(); } else if(code == 188 || code == 37 && imgs.pHtml != ""){ // display prev image goPrev(); } }; cee_position(imgW + 30,imgH + 60); $("#cee_load").remove(); $("#cee_ImageOff").click(cee_remove); $("#cee_window").css({display:"block"}); //for safari using css instead of show }; imgPreloader.src = url; }; function cee_ajaxWindow(url,htmlSize,caption,rel) { //if indicated as ajax display as such; also, show relative path links as ajax unless indicated as iframe ajaxSize = [htmlSize[0],htmlSize[1] - 5]; if($("#cee_window").css("display") != "block"){ //if window currently not displaying if(rel && rel.match("modal")){//modal ajax ceebox $("#cee_overlay").unbind(); $("#cee_window").append("
"); }else{//normal non-modal ajax $("#cee_window").append("
"+caption+"
close or Esc Key
"); } }else{ //if the window is already up, we are just loading new content via ajax $("#cee_ajaxContent")[0].style.width = ajaxSize[0] +"px"; $("#cee_ajaxContent")[0].style.height = ajaxSize[1] +"px"; $("#cee_ajaxContent")[0].scrollTop = 0; $("#cee_ajaxWindowTitle").html(caption); } $("#cee_closeWindowButton").click(cee_remove); if (rel && rel.match(/#[a-z_A-Z1-9]+/)){ //if the user as supplied a id to target in the rel than use that targetId = rel.match(/#[a-z_A-Z1-9]+/); $("#cee_ajaxContent").load(url + " " + targetId); } else { $("#cee_ajaxContent").load(url); } cee_position(htmlSize[0]+30, htmlSize[1]+40); $("#cee_load").remove(); cee_init("#cee_ajaxContent a.ceebox"); $("#cee_window").css({display:"block"}); document.onkeyup = function(e){ e = e || window.event; (e.keyCode == 27 || e.which == 27) ? cee_remove() : false ; }; } function cee_iframeWindow(url,htmlSize,caption,rel) { //else show as iframe (catch-all) iframeSize = [htmlSize[0] + 29,htmlSize[1] + 12]; $("#cee_iframeContent").remove(); if (rel && rel.match("modal")) {//modal iframe ceebox $("#cee_overlay").unbind(); $("#cee_window").append(""); } else {//normal non-modal iframe ceebox (this is what it defaults to) $("#cee_window").append("
"+caption+"
close or Esc Key
"); } $("#cee_closeWindowButton").click(cee_remove); cee_position(htmlSize[0]+30, htmlSize[1]+40); if($.browser.safari){//safari needs help because it will not fire iframe onload $("#cee_load").remove(); $("#cee_window").css({display:"block"}); } document.onkeyup = function(e){ e = e || window.event; (e.keyCode == 27 || e.which == 27) ? cee_remove() : false ; }; } function cee_showIframe(){ $("#cee_load").remove(); $("#cee_window").css({display:"block"}); } function cee_remove() { $("#cee_imageOff").unbind("click"); $("#cee_closeWindowButton").unbind("click"); $("#cee_window").fadeOut("fast",function(){$('#cee_window,#cee_overlay,#cee_HideSelect').unbind().trigger("unload").remove();}); $("#cee_load").remove(); if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 $("body","html").css({height: "auto", width: "auto"}); $("html").css("overflow",""); } document.onkeydown = null; document.onkeyup = null; return false; } function cee_position(w,h) { $("#cee_window").css({marginLeft: '-' + parseInt((w / 2),10) + 'px', width: w + 'px'}); if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6 $("#cee_window").css({marginTop: '-' + parseInt((h / 2),10) + 'px'}); } } function cee_getSize(rel,baseW,baseH){ //Base width and height set at top of ceebox.js; If base not set than it is //To set width and height manually for the video use the rel attribute. I.E., rel="600 480" var pagesize = cee_getPageSize(); (baseW)? baseW=baseW*1 : baseW=pagesize[0] - 150; (baseH)? baseH=baseH*1 : baseH=pagesize[1] - 150; var sizes=new Array(); if (rel && rel.match(/[0-9]+/g)){ sizes = rel.match(/[0-9]+/g); sizes[0] = (sizes[0]) ? sizes[0]*1 : baseW; sizes[1] = (sizes[1]) ? sizes[1]*1 : baseH; } else { sizes = [baseW,baseH]; } return sizes; } function cee_vidWindow(u,s,c,p) { //create ceebox window for video $("#cee_window").append("
" + "
"+c+"
close or Esc Key
"); $("#cee_closeWindowButton").click(cee_remove); cee_position(s[0] + 30,s[1] + 60); document.onkeyup = function(e){ e = e || window.event; (e.keyCode == 27 || e.which == 27) ? cee_remove() : false ; }; //embed swfobject $('#cee_video').flash({ swf: u, width: s[0], height: s[1], params: p }); $("#cee_load").remove(); $("#cee_window").css({display:"block"}); //for safari using css instead of show } function cee_getPageSize(){ var de = document.documentElement; var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; arrayPageSize = [w,h]; return arrayPageSize; } function cee_detectMacXFF() { var userAgent = navigator.userAgent.toLowerCase(); if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { return true; } }