| Current Path : /home/balossw/www/temp/media/js/ |
| Current File : /home/balossw/www/temp/media/js/jquery.lightbox.js |
(function($){
$.lightbox = function (options) {
var settings = {
padding: 15,
width: null,
height: null,
finalHeight: null,
url: null,
title: null,
callback: null
};
$.extend(settings, options);
var zIndex = 90;
$('.jquery-lightbox').each(function () {
var jlightbox = $(this);
var tmp_zIndex = jlightbox.css('z-index');
if (tmp_zIndex>=zIndex) zIndex = tmp_zIndex+1;
});
var joverlay = $('<div class="jquery-lightbox-overlay"></div>');
joverlay.css({
opacity: 0.5,
'z-index': zIndex
});
var jlightbox = $('<div class="jquery-lightbox"></div>');
jlightbox.css({
'z-index': zIndex+1
});
$('body').append(joverlay, jlightbox);
function close() {
jlightbox.remove();
joverlay.fadeOut(function(){
joverlay.remove();
});
};
joverlay.click(close);
function getValue(values, referenceValue) {
var value = null;
for (var i in values) {
value = values[i];
if (typeof value=='string') {
var intValue = parseInt(value,10);
if (value.substr(-1)=='%') value = Math.round(intValue*referenceValue/100);
else value = intValue;
}
if (value) return value;
}
return 0;
}
function append(settings, width, height, jfullcontent) {
var window_width = $(window).width();
var window_height = $(window).height();
var jcontent = jfullcontent.not('script');
width = getValue([width, jcontent.css('width'), 800], window_width);
height = getValue([height, jcontent.css('height'), 400], window_height);
var jclose = $('<div class="jquery-lightbox-close">Fermer</div>');
jclose.click(close);
jlightbox.animate({
left: Math.round((window_width-width-2*settings.padding)/2),
top: Math.round((window_height-height-2*settings.padding)/2),
width: width,
height: height,
padding: settings.padding
},
null,
function(){
jlightbox.append(jclose, jfullcontent);
if (settings.finalHeight) {
jlightbox.css({height: settings.finalHeight});
} else if (jcontent.size()==1 && jcontent.height()!=height) {
jcontent.css({height: height});
}
if (settings.callback) {
settings.callback();
}
}
);
}
var url = settings.url;
if (url.indexOf('?')!=-1) {
url = url.substring(0,url.indexOf('?'));
}
var url_elements = url.split('.');
var ext = url_elements[url_elements.length-1].toLowerCase();
if (ext=='png' || ext=='jpg' || ext=='gif' || ext=='jpeg') {
var image = new Image();
var jimage = $(image);
jimage.load(function(){
settings.finalHeight = 'auto';
if (!settings.title) settings.title = jimage.attr('src');
var jinfos = $('<div class="jquery-lightbox-infos">'+settings.title+'</div>');
append(settings, image.width, image.height, jimage.add(jinfos));
});
jimage.attr('src', settings.url);
} else {
if (settings.url.substr(0,7)!='http://') settings.url = $('base').attr('href')+settings.url;
$.ajax({
url: settings.url,
success: function(msg){
append(settings, settings.width, settings.height, $(msg));
}
});
}
};
$.fn.lightbox = function (options) {
var settings = {
url: null,
title: null
};
$.extend(settings, options);
var jelems = this.not('[lightbox]');
jelems.attr('lightbox', true);
jelems.click(function(event){
var jelem = $(this);
event.preventDefault();
if (jelem.attr('running')) return;
jelem.attr('running', true);
settings.url = jelem.attr('href');
settings.title = jelem.attr('title');
settings.callback = function () {
jelem.removeAttr('running');
};
$.lightbox(settings);
});
};
})(jQuery);