/* Inspired by the lightbox plugin adapted to jquery by Leandro Vieira Pinho (http://leandrovieira.com) @author : Nicolas Turlais : nicolas-at-insipi.de @version : V0.3.1 - June 2012 @license : Licensed under CCAttribution-ShareAlike @website : http://chocolat.insipi.de */ (function ($) { images = []; var calls = 0; $.fn.Chocolat = function (settings) { settings = $.extend({ container: $('body'), displayAsALink: false, linkImages: true, linksContainer: 'Choco_links_container', overlayOpacity: 0.9, overlayColor: '#fff', fadeInOverlayduration: 500, fadeInImageduration: 500, fadeOutImageduration: 500, vache: true, separator1: ' | ', separator2: '/', leftImg: 'images/left.gif', rightImg: 'images/right.gif', closeImg: 'images/close.gif', loadingImg: 'images/loading.gif', currentImage: 0, setIndex: 0, setTitle: '', lastImage: 0 }, settings); calls++; settings.setIndex = calls; images[settings.setIndex] = []; //images: this.each(function (index) { if (index == 0 && settings.linkImages && settings.setTitle == '') { settings.setTitle = isSet($(this).attr('rel'), ' '); } $(this).each(function () { images[settings.setIndex]['displayAsALink'] = settings.displayAsALink; images[settings.setIndex][index] = []; images[settings.setIndex][index]['adress'] = isSet($(this).attr('href'), ' '); images[settings.setIndex][index]['caption'] = isSet($(this).attr('title'), ' '); if (!settings.displayAsALink) { $(this).unbind('click').bind('click', { id: settings.setIndex, nom: settings.setTitle, i: index }, _initialise); } }) }); //setIndex: for (var i = 0; i < images[settings.setIndex].length; i++) { if (images[settings.setIndex]['displayAsALink']) { if ($('#' + settings.linksContainer).size() == 0) { this.filter(":first").before(''); } $('#' + settings.linksContainer).append('
  • ' + settings.setTitle + '
  • '); e = this.parent(); $(this).remove(); if ($.trim(e.html()) == "") {//If parent empty : remove it e.remove(); } return $('#Choco_numsetIndex_' + settings.setIndex).unbind('click').bind('click', { id: settings.setIndex, nom: settings.setTitle, i: settings.currentImage }, _initialise); } } function _initialise(event) { settings.currentImage = event.data.i; settings.setIndex = event.data.id; settings.setTitle = event.data.nom; settings.lastImage = images[settings.setIndex].length - 1; showChocolat(); return false; } function _interface() { //html clear(); settings.container.append('
    '); $('#Choco_left_arrow').css('background-image', 'url(' + settings.leftImg + ')'); $('#Choco_right_arrow').css('background-image', 'url(' + settings.rightImg + ')'); $('#Choco_close').css('background-image', 'url(' + settings.closeImg + ')'); $('#Choco_loading').css('background-image', 'url(' + settings.loadingImg + ')'); if (settings.container.get(0).nodeName.toLowerCase() !== 'body') { settings.container.css({'position': 'relative', 'overflow': 'hidden', 'line-height': 'normal'});//yes, yes $('#Choco_content').css('position', 'relative'); $('#Choco_overlay').css('position', 'absolute'); } //events $(document).unbind('keydown').bind('keydown', function (e) { switch (e.keyCode) { case 37: changePageChocolat(-1); break; case 39: changePageChocolat(1); break; case 27: close(); break; } ; }); if (settings.vache) { $('#Choco_overlay').click(function () { close(); return false; }); } $('#Choco_left_arrow').unbind().bind('click', function () { changePageChocolat(-1); return false; }); $('#Choco_right_arrow').unbind().bind('click', function () { changePageChocolat(1); return false; }); $('#Choco_close').unbind().bind('click', function () { close(); return false; }); $(window).resize(function () { load(settings.currentImage, true); }); } function showChocolat() { _interface(); load(settings.currentImage, false); $('#Choco_overlay') .css({ 'background-color': settings.overlayColor, 'opacity': settings.overlayOpacity }) .fadeIn(settings.fadeInOverlayduration); $('#Choco_content').fadeIn(settings.fadeInImageduration, function () { }); } function load(image, resize) { settings.currentImage = image; $('#Choco_loading').fadeIn(settings.fadeInImageduration); var imgPreloader = new Image(); imgPreloader.onload = function () { $('#Choco_bigImage').attr('src', images[settings.setIndex][settings.currentImage]['adress']); var ajustees = iWantThePerfectImageSize(imgPreloader.height, imgPreloader.width); ChoColat(ajustees['hauteur'], ajustees['largeur'], resize); $('#Choco_loading').stop().fadeOut(settings.fadeOutImageduration); }; imgPreloader.src = images[settings.setIndex][settings.currentImage]['adress']; preload(); upadteDescription(); } function changePageChocolat(signe) { if (!settings.linkImages || (settings.currentImage == 0 && signe == -1) || (settings.currentImage == settings.lastImage && signe == 1)) { return false; } else { //$('#Choco_container_description').fadeTo(settings.fadeOutImageduration,0); making a weird bug with firefox 17 $('#Choco_container_description').css('visibility', 'hidden'); $('#Choco_bigImage').fadeTo(settings.fadeOutImageduration, 0, function () { load(settings.currentImage + parseInt(signe), false); }); } } function ChoColat(hauteur_image, largeur_image, resize) { if (resize) { $('#Choco_container_photo, #Choco_content, #Choco_bigImage').stop(true, false).css({'overflow': 'visible'}); $('#Choco_bigImage').animate({ 'height': hauteur_image + 'px', 'width': largeur_image + 'px' }, settings.fadeInImageduration); } $('#Choco_container_photo').animate({ 'height': hauteur_image, 'width': largeur_image }, settings.fadeInImageduration); $('#Choco_content').animate({ 'height': hauteur_image, 'width': largeur_image, 'marginLeft': -largeur_image / 2, 'marginTop': -(hauteur_image) / 2 }, settings.fadeInImageduration, 'swing', function () { $('#Choco_bigImage').fadeTo(settings.fadeInImageduration, 1).height(hauteur_image).width(largeur_image); if (!resize) { arrowsManaging(); //$('#Choco_container_description').fadeTo(settings.fadeInImageduration,1); making a weird bug with firefox 17 $('#Choco_container_description').css('visibility', 'visible'); $('#Choco_close').fadeIn(settings.fadeInImageduration); } }).css('overflow', 'visible'); } function arrowsManaging() { if (settings.linkImages) { var what = ['Choco_right_arrow', 'Choco_left_arrow']; for (var i = 0; i < what.length; i++) { hide = false; if (what[i] == 'Choco_right_arrow' && settings.currentImage == settings.lastImage) { hide = true; $('#' + what[i]).fadeOut(300); } else if (what[i] == 'Choco_left_arrow' && settings.currentImage == 0) { hide = true; $('#' + what[i]).fadeOut(300); } if (!hide) { $('#' + what[i]).fadeIn(settings.fadeOutImageduration); } } } } function preload() { if (settings.currentImage !== settings.lastImage) { i = new Image; z = settings.currentImage + 1; i.src = images[settings.setIndex][z]['adress']; } } function upadteDescription() { var current = settings.currentImage + 1; var last = settings.lastImage + 1; $('#Choco_container_title').html(images[settings.setIndex][settings.currentImage]['caption']); $('#Choco_container_via').html(settings.setTitle + settings.separator1 + current + settings.separator2 + last); } function isSet(variable, defaultValue) { // return variable === undefined ? defaultValue : variable; ? if (variable === undefined) { return defaultValue; } else { return variable; } } function iWantThePerfectImageSize(himg, limg) { //28% = 14% + 14% margin var lblock = limg + (limg * 28 / 100); var heightDescAndClose = $('#Choco_container_description').height() + $('#Choco_close').height(); var hblock = himg + heightDescAndClose; var k = limg / himg; var kk = himg / limg; if (settings.container.get(0).nodeName.toLowerCase() == 'body') { windowHeight = $(window).height(); windowWidth = $(window).width(); } else { windowHeight = settings.container.height(); windowWidth = settings.container.width(); } notFitting = true; while (notFitting) { var lblock = limg + (limg * 28 / 100); var hblock = himg + heightDescAndClose; if (lblock > windowWidth) { limg = windowWidth * 100 / 128; himg = kk * limg; } else if (hblock > windowHeight) { himg = (windowHeight - heightDescAndClose); limg = k * himg; } else { notFitting = false; } ; } ; return { largeur: limg, hauteur: himg }; } function clear() { $('#Choco_overlay').remove(); $('#Choco_content').remove(); } function close() { $('#Choco_overlay').fadeOut(900, function () { $('#Choco_overlay').remove() }); $('#Choco_content').fadeOut(500, function () { $('#Choco_content').remove() }); settings.currentImage = 0; } }; })(jQuery);