if(typeof Shadowbox == 'undefined'){
throw 'Unable to load Shadowbox, no base library adapter found.';
}
(function(){
var version = '1.0b7';
var options = {
assetURL: '',
loadingImage: '../images/shadowbox/loading_orange.gif',
animate:true,
animSequence: 'wh',
flvPlayer:'../flash/flvplayer.swf',
overlayColor: '#FF9900',
overlayOpacity:	0.70,
overlayBgImage: '../images/shadowbox/overlay-85.png',
autoplayMovies: 	true,
showMovieControls: 	true,
resizeDuration: 0.30,
fadeDuration: 0.30,
displayNav: true,
continuous: false,
displayCounter: true,
counterType:'default',
viewportPadding:10,
handleLgImages: 'drag',
initialHeight:10,
initialWidth: 700,
enableKeys: true,
keysClose:['c', 'q', 27],
keysNext: ['n', 39],
keysPrev: ['p', 37],
onOpen: null,
onFinish: null,
onChange: null,
onClose:null,
handleUnsupported:'link',
skipSetup:false,
text: {
cancel: 'Cancel',
loading:'loading',
close:'<span class="shortcut">C</span>lose',
next: '<span class="shortcut">N</span>ext',
prev: '<span class="shortcut">P</span>revious',
errors: {
single: 'You must install the <a href="{0}">{1}</a> browser plugin to view this content.',
shared: 'You must install both the <a href="{0}">{1}</a> and <a href="{2}">{3}</a> browser plugins to view this content.',
either: 'You must install either the <a href="{0}">{1}</a> or the <a href="{2}">{3}</a> browser plugin to view this content.'
}

},
errors: {
fla:{
name: 'Flash',
url:'http://www.adobe.com/products/flashplayer/'
},
qt: {
name: 'QuickTime',
url:'http://www.apple.com/quicktime/download/'
},
wmp:{
name: 'Windows Media Player',
url:'http://www.microsoft.com/windows/windowsmedia/'
},
f4m:{
name: 'Flip4Mac',
url:'http://www.flip4mac.com/wmv_download.htm'
}
},
skin: {
main: '<div id="shadowbox_overlay"></div>' +
'<div id="shadowbox_container">' +
'<div id="shadowbox">' +
'<div id="shadowbox_title">' +
'<div id="shadowbox_title_inner"></div>' +
'</div>' +
'<div id="shadowbox_body">' +
'<div id="shadowbox_body_inner"></div>' +
'<div id="shadowbox_loading"></div>' +
'</div>' +
'<div id="shadowbox_toolbar">' +
'<div id="shadowbox_toolbar_inner"></div>' +
'</div>' +
'</div>' +
'</div>',
loading:'<img src="{0}" alt="{1}" />' +
'<span><a href="javascript:Shadowbox.close();">{2}</a></span>',
counter:'<div id="shadowbox_counter">{0}</div>',
close:'<div id="shadowbox_nav_close">' +
'<a href="javascript:Shadowbox.close();">{0}</a>' +
'</div>',
next: '<div id="shadowbox_nav_next">' +
'<a href="javascript:Shadowbox.next();">{0}</a>' +
'</div>',
prev: '<div id="shadowbox_nav_previous">' +
'<a href="javascript:Shadowbox.previous();">{0}</a>' +
'</div>'
},
ext: {
img:['png', 'jpg', 'jpeg', 'gif', 'bmp'],
qt: ['dv', 'mov', 'moov', 'movie', 'mp4'],
wmp:['asf', 'wm', 'wmv'],
qtwmp:['avi', 'mpg', 'mpeg'],
iframe: ['asp', 'aspx', 'cgi', 'cfm', 'htm', 'html', 'pl', 'php',
'php3', 'php4', 'php5', 'phtml', 'rb', 'rhtml', 'shtml',
'txt', 'vbs']
}
};
var default_options = null;
var SL = Shadowbox.lib;
var RE = {
resize: /(img|swf|flv)/,
swf:/\.swf\s*$/i,
flv:/\.flv\s*$/i,
domain: /:\/\/(.*?)[:\/]/,
inline: /#(.+)$/,
rel:/^shadowbox/i,
gallery:/^shadowbox\[(.*?)\]/i,
unsupported:/^unsupported-(\w+)/,
param:/\s*([a-z_]*?)\s*=\s*(.+)\s*/,
empty:/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i
};
var cache = [];
var current_gallery;
var current;
var optimal_height = options.initialHeight;
var optimal_width = options.initialWidth;
var current_height = 0;
var current_width = 0;
var preloader;
var initialized = false;
var activated = false;
var drag;
var draggable;
var overlay_img_needed;
var ua = navigator.userAgent.toLowerCase();
var isStrict = document.compatMode == 'CSS1Compat',
isOpera = ua.indexOf("opera") > -1,
isIE = ua.indexOf('msie') > -1,
isIE7 = ua.indexOf('msie 7') > -1,
isBorderBox = isIE && !isStrict,
isSafari = (/webkit|khtml/).test(ua),
isSafari3 = isSafari && !!(document.evaluate),
isGecko = !isSafari && ua.indexOf('gecko') > -1,
isWindows = (ua.indexOf('windows') != -1 || ua.indexOf('win32') != -1),
isMac = (ua.indexOf('macintosh') != -1 || ua.indexOf('mac os x') != -1),
isLinux = (ua.indexOf('linux') != -1);
var absolute_pos = isIE && !isIE7;
var plugins = null;
if(navigator.plugins && navigator.plugins.length){
var detectPlugin = function(plugin_name){
var detected = false;
for (var i = 0, len = navigator.plugins.length; i < len; ++i){
if(navigator.plugins[i].name.indexOf(plugin_name) > -1){
detected = true;
break;
}
}
return detected;
};
var f4m = detectPlugin('Flip4Mac');
var plugins = {
fla:detectPlugin('Shockwave Flash'),
qt: detectPlugin('QuickTime'),
wmp:!f4m && detectPlugin('Windows Media'), // if it's Flip4Mac, it's not really WMP
f4m:f4m
};
}else{
var detectPlugin = function(plugin_name){
var detected = false;
try {
var axo = new ActiveXObject(plugin_name);
if(axo){
detected = true;
}
} catch (e) {}
return detected;
};
var plugins = {
fla:detectPlugin('ShockwaveFlash.ShockwaveFlash'),
qt: detectPlugin('QuickTime.QuickTime'),
wmp:detectPlugin('wmplayer.ocx'),
f4m:false
};
}
var apply = function(o, e){
if(o && e && typeof e == 'object'){
for (var p in e) o[p] = e[p];
}
return o;
};
SL.getViewportHeight = function(){
var height = window.innerHeight;
var mode = document.compatMode;
if((mode || isIE) && !isOpera){
height = isStrict ? document.documentElement.clientHeight : document.body.clientHeight;
}
return height;
};
SL.getViewportWidth = function(){
var width = window.innerWidth;
var mode = document.compatMode;
if(mode || isIE){
width = isStrict ? document.documentElement.clientWidth : document.body.clientWidth;
}
return width;
};
SL.getDocumentHeight = function(){
var scrollHeight = isStrict ? document.documentElement.scrollHeight : document.body.scrollHeight;
return Math.max(scrollHeight, SL.getViewportHeight());
};
SL.getDocumentWidth = function(){
var scrollWidth = isStrict ? document.documentElement.scrollWidth : document.body.scrollWidth;
return Math.max(scrollWidth, SL.getViewportWidth());
};
var clearOpacity = function(el){
if(isIE){
if(typeof el.style.filter == 'string' && (/alpha/i).test(el.style.filter)){
el.style.filter = '';
}
}else{
el.style.opacity = '';
el.style['-moz-opacity'] = '';
el.style['-khtml-opacity'] = '';
}
};
var fadeIn = function(el, endingOpacity, duration, callback){
if(options.animate){
SL.setStyle(el, 'opacity', 0);
el.style.visibility = 'visible';
SL.animate(el, {
opacity: { to: endingOpacity }
}, duration, function(){
if(endingOpacity == 1) clearOpacity(el);
if(typeof callback == 'function') callback();
});
}else{
if(endingOpacity == 1){
clearOpacity(el);
}else{
SL.setStyle(el, 'opacity', endingOpacity);
}
el.style.visibility = 'visible';
if(typeof callback == 'function') callback();
}
};
var fadeOut = function(el, duration, callback){
var cb = function(){
el.style.visibility = 'hidden';
clearOpacity(el);
if(typeof callback == 'function') callback();
};
if(options.animate){
SL.animate(el, {
opacity: { to: 0 }
}, duration, cb);
}else{
cb();
}
};
var appendHTML = function(el, html){
el = SL.get(el);
if(el.insertAdjacentHTML){
el.insertAdjacentHTML('BeforeEnd', html);
return el.lastChild;
}
if(el.lastChild){
var range = el.ownerDocument.createRange();
range.setStartAfter(el.lastChild);
var frag = range.createContextualFragment(html);
el.appendChild(frag);
return el.lastChild;
}else{
el.innerHTML = html;
return el.lastChild;
}
};
var overwriteHTML = function(el, html){
el = SL.get(el);
el.innerHTML = html;
return el.firstChild;
};
var getComputedHeight = function(el){
var h = Math.max(el.offsetHeight, el.clientHeight);
if(!h){
h = parseInt(SL.getStyle(el, 'height'), 10) || 0;
if(!isBorderBox){
h += parseInt(SL.getStyle(el, 'padding-top'), 10)
+ parseInt(SL.getStyle(el, 'padding-bottom'), 10)
+ parseInt(SL.getStyle(el, 'border-top-width'), 10)
+ parseInt(SL.getStyle(el, 'border-bottom-width'), 10);
}
}
return h;
};
var getComputedWidth = function(el){
var w = Math.max(el.offsetWidth, el.clientWidth);
if(!w){
w = parseInt(SL.getStyle(el, 'width'), 10) || 0;
if(!isBorderBox){
w += parseInt(SL.getStyle(el, 'padding-left'), 10)
+ parseInt(SL.getStyle(el, 'padding-right'), 10)
+ parseInt(SL.getStyle(el, 'border-left-width'), 10)
+ parseInt(SL.getStyle(el, 'border-right-width'), 10);
}
}
return w;
};
var getPlayerType = function(url){
if(RE.img.test(url)){
return 'img';
}
var this_domain = (domain_match = url.match(RE.domain))
? (document.domain == domain_match[1])
: false;
if(url.indexOf('#') > -1 && this_domain) return 'html';
var q_index = url.indexOf('?');
if(q_index > -1){
url = url.substring(0, q_index);
}
if(RE.swf.test(url)) return (plugins.fla) ? 'swf' : 'unsupported-swf';
if(RE.flv.test(url)) return (plugins.fla) ? 'flv' : 'unsupported-flv';
if(RE.qt.test(url)) return (plugins.qt) ? 'qt' : 'unsupported-qt';
if(RE.wmp.test(url)){
if(plugins.wmp){
return 'wmp';
}else if(plugins.f4m){
return 'qt';
}else{
if(isMac) return (plugins.qt ? 'unsupported-f4m' : 'unsupported-qtf4m');
return 'unsupported-wmp';
}
}else if(RE.qtwmp.test(url)){
if(plugins.qt){
return 'qt';
}else if(plugins.wmp){
return 'wmp';
}else{
return (isMac ? 'unsupported-qt' : 'unsupported-qtwmp');
}
}else if(!this_domain || RE.iframe.test(url)){
return 'iframe';
}
return 'unsupported';
};
var getGallery = function(link){
var key = link.shadowboxCacheKey;
var name = cache[key].gallery;
if(!name){
return [[apply({}, cache[key])], 0]; // single item, no gallery
}else{
var gallery = [], index;
for(var i = 0, len = cache.length; i < len; ++i){
if(key == i){
index = gallery.length; // key element found
gallery[gallery.length] = apply({}, cache[i]);
}else if(cache[i].gallery && cache[i].gallery == name){
gallery[gallery.length] = apply({}, cache[i]);
}
}
if(index == null) throw 'No Shadowbox cache item with index ' + key;
return [gallery, index];
}
};
var setupGallery = function(link){
var gallery_info = getGallery(link);
current_gallery = gallery_info[0];
current = gallery_info[1];
var match;
for(var i = 0; i < current_gallery.length; ++i){
if(match = RE.unsupported.exec(current_gallery[i].type)){ // handle unsupported elements
if(options.handleUnsupported == 'link'){
current_gallery[i].type = 'html';
var m;
switch(match[1]){
case 'qtwmp':
m = String.format(
options.text.errors.either,
options.errors.qt.url,
options.errors.qt.name,
options.errors.wmp.url,
options.errors.wmp.name);
break;
case 'qtf4m':
m = String.format(
options.text.errors.shared,
options.errors.qt.url,
options.errors.qt.name,
options.errors.f4m.url,
options.errors.f4m.name);
break;
default:
if(match[1] == 'swf' || match[1] == 'flv'){
match[1] = 'fla';
}
m = String.format(
options.text.errors.single,
options.errors[match[1]].url,
options.errors[match[1]].name);
}
current_gallery[i] = apply(current_gallery[i], {
height: options.initialHeight,
width:options.initialWidth,
html: Shadowbox.createHTML({
tag:'div',
cls:'shadowbox_message',
html: m
})
});
}else{
current_gallery.splice(i, 1);
if(i < current) --current;
--i;
}
}else if(current_gallery[i].type == 'html'){ // handle inline elements
var match = RE.inline.exec(current_gallery[i].href);
if(match){
var el;
if(el = SL.get(match[1])){
current_gallery[i].html = el.innerHTML;
}else{
throw 'No element found with id ' + match[1];
}
}else{
throw 'No element id found for inline content';
}
}
}
};
var handleClick = function(ev){
if(activated) return;
activated = true;
var link;
if(typeof this.tagName == 'string' && this.tagName.toUpperCase() == 'A'){
link = this;
}else{
link = SL.getTarget(ev);
while(link.tagName.toUpperCase() != 'A' && link.parentNode){
link = link.parentNode;
}
}
setupGallery(link);
if(current_gallery.length){
SL.preventDefault(ev);
openContent(link);
}
};
var buildBars = function(){
var link = current_gallery[current];
if(!link) return;
var title_i = SL.get('shadowbox_title_inner');
title_i.innerHTML = (link.title) ? link.title : '';
var tool_i = SL.get('shadowbox_toolbar_inner');
tool_i.innerHTML = '';
if(options.displayNav){
tool_i.innerHTML = String.format(options.skin.close, options.text.close);
if(current_gallery.length > 1){
if(options.continuous){
appendHTML(tool_i, String.format(options.skin.next, options.text.next));
appendHTML(tool_i, String.format(options.skin.prev, options.text.prev));
}else{
if((current_gallery.length - 1) > current){
appendHTML(tool_i, String.format(options.skin.next, options.text.next));
}
if(current > 0){
appendHTML(tool_i, String.format(options.skin.prev, options.text.prev));
}
}
}
}
if(current_gallery.length > 1 && options.displayCounter){
var counter = '';
if(options.counterType == 'skip'){
for(var i = 0, len = current_gallery.length; i < len; ++i){
counter += '<a href="javascript:Shadowbox.change(' + i + ');"';
if(i == current){
counter += ' class="shadowbox_counter_current"';
}
counter += '>' + (i + 1) + '</a>';
}
}else{
counter = (current + 1) + ' of ' + current_gallery.length;
}
appendHTML(tool_i, String.format(options.skin.counter, counter));
}
};
var hideBars = function(callback){
var title_m = getComputedHeight(SL.get('shadowbox_title'));
var tool_m = 0 - getComputedHeight(SL.get('shadowbox_toolbar'));
var title_i = SL.get('shadowbox_title_inner');
var tool_i = SL.get('shadowbox_toolbar_inner');
if(options.animate && callback){
SL.animate(title_i, {
marginTop: { to: title_m }
}, 0.2);
SL.animate(tool_i, {
marginTop: { to: tool_m }
}, 0.2, callback);
}else{
SL.setStyle(title_i, 'marginTop', title_m + 'px');
SL.setStyle(tool_i, 'marginTop', tool_m + 'px');
}
};
var showBars = function(callback){
var title_i = SL.get('shadowbox_title_inner');
if(options.animate){
if(title_i.innerHTML != ''){
SL.animate(title_i, { marginTop: { to: 0 } }, 0.35);
}
SL.animate(SL.get('shadowbox_toolbar_inner'), {
marginTop: { to: 0 }
}, 0.35, callback);
}else{
if(title_i.innerHTML != ''){
SL.setStyle(title_i, 'margin-top', '0px');
}
SL.setStyle(SL.get('shadowbox_toolbar_inner'), 'margin-top', '0px');
callback();
}
};
var resetDrag = function(){
drag = {
x:0,
y:0,
start_x:null,
start_y:null
};
};
var toggleDrag = function(on){
if(on){
resetDrag();
var styles = [
'position:absolute',
'cursor:' + (isGecko ? '-moz-grab' : 'move')
];
styles.push(isIE ? 'background-color:#fff;filter:alpha(opacity=0)' : 'background-color:transparent');
appendHTML('shadowbox_body_inner', '<div id="shadowbox_drag_layer" style="' + styles.join(';') + '"></div>');
SL.addEvent(SL.get('shadowbox_drag_layer'), 'mousedown', listenDrag);
}else{
var d = SL.get('shadowbox_drag_layer');
if(d){
SL.removeEvent(d, 'mousedown', listenDrag);
SL.remove(d);
}
}
};
var listenDrag = function(ev){
drag.start_x = ev.clientX;
drag.start_y = ev.clientY;
draggable = SL.get('shadowbox_content');
SL.addEvent(document, 'mousemove', positionDrag);
SL.addEvent(document, 'mouseup', unlistenDrag);
if(isGecko) SL.setStyle(SL.get('shadowbox_drag_layer'), 'cursor', '-moz-grabbing');
};
var unlistenDrag = function(){
SL.removeEvent(document, 'mousemove', positionDrag);
SL.removeEvent(document, 'mouseup', unlistenDrag); // clean up
if(isGecko) SL.setStyle(SL.get('shadowbox_drag_layer'), 'cursor', '-moz-grab');
};
var positionDrag = function(ev){
var move_y = ev.clientY - drag.start_y;
drag.start_y = drag.start_y + move_y;
drag.y = Math.max(Math.min(0, drag.y + move_y), current_height - optimal_height); // y boundaries
SL.setStyle(draggable, 'top', drag.y + 'px');
var move_x = ev.clientX - drag.start_x;
drag.start_x = drag.start_x + move_x;
drag.x = Math.max(Math.min(0, drag.x + move_x), current_width - optimal_width); // x boundaries
SL.setStyle(draggable, 'left', drag.x + 'px');
};
var openContent = function(link){
if(default_options){
options = default_options;
default_options = null;
}
if(current_gallery[current].options){
default_options = apply({}, options);
options = apply(options, current_gallery[current].options);
}
if(options.onOpen && typeof options.onOpen == 'function'){
options.onOpen(link);
}
SL.setStyle(SL.get('shadowbox'), 'display', 'block');
toggleTroubleElements(false);
var dims = getDimensions(options.initialHeight, options.initialWidth);
adjustHeight(dims.height, dims.top);
adjustWidth(dims.width);
hideBars(false);
toggleOverlay(function(){
SL.setStyle(SL.get('shadowbox'), 'visibility', 'visible');
showLoading();
loadContent();
});
};
var setContent = function(obj){
var id = 'shadowbox_content';
var content = SL.get(id);
if(content){
switch(content.tagName.toUpperCase()){
case 'OBJECT':
var link = current_gallery[(obj ? current - 1 : current)];
if(link.type == 'wmp' && isIE){
try{
shadowbox_content.controls.stop();
shadowbox_content.URL = 'non-existent.wmv';
window.shadowbox_content = function(){};
}catch(e){}
}else if(link.type == 'qt' && isSafari){
try{
document.shadowbox_content.Stop();
}catch(e){}
content.innerHTML = '';
}
setTimeout(function(){
SL.remove(content);
}, 10);
break;
case 'IFRAME':
SL.remove(content);
if(isGecko) delete window.frames[id];
break;
default:
SL.remove(content);
}
}
if(obj){
if(!obj.id) obj.id = id;
return appendHTML('shadowbox_body_inner', Shadowbox.createHTML(obj));
}
return null;
};
var loadContent = function(){
var link = current_gallery[current];
if(!link) return; 
buildBars();
switch(link.type){
case 'img':
preloader = new Image();
preloader.onload = function(){
var h = link.height ? parseInt(link.height, 10) : preloader.height;
var w = link.width ? parseInt(link.width, 10) : preloader.width;
resizeContent(preloader.height, preloader.width, function(dims){
showBars(function(){
setContent({
tag:'img',
height: dims.i_height,
width:dims.i_width,
src:link.href,
style:'position:absolute'
});
if(dims.enableDrag && options.handleLgImages == 'drag'){
toggleDrag(true);
SL.setStyle(SL.get('shadowbox_drag_layer'), {
height: dims.i_height + 'px',
width:dims.i_width + 'px'
});
}
finishContent();
});
});

preloader.onload = function(){};
};
preloader.src = link.href;
break;
case 'swf':
case 'flv':
case 'qt':
case 'wmp':
var markup = Shadowbox.movieMarkup(link);
resizeContent(markup.height, markup.width, function(){
showBars(function(){
setContent(markup);
finishContent();
});
});
break;
case 'iframe':
var h = link.height ? parseInt(link.height, 10) : SL.getViewportHeight();
var w = link.width ? parseInt(link.width, 10) : SL.getViewportWidth();
var content = {
tag:'iframe',
name: 'shadowbox_content',
height: '100%',
width:'100%',
frameborder:'0',
marginwidth:'0',
marginheight: '0',
scrolling:'auto'
};
resizeContent(h, w, function(dims){
showBars(function(){
setContent(content);
var win = (isIE)
? SL.get('shadowbox_content').contentWindow
: window.frames['shadowbox_content'];
win.location = link.href;
finishContent();
});
});
break;
case 'html':
var h = link.height ? parseInt(link.height, 10) : SL.getViewportHeight();
var w = link.width ? parseInt(link.width, 10) : SL.getViewportWidth();
var content = {
tag:'div',
cls:'html',
html: link.html
};
resizeContent(h, w, function(){
showBars(function(){
setContent(content);
finishContent();
});
});
break;
case 'unsupported':
throw 'Content type cannot be determined for ' + link.href;
break;
}
if(current_gallery.length > 0){
var next = current_gallery[current + 1];
if(!next){
next = current_gallery[0];
}
if(next.type == 'img'){
var preload_next = new Image();
preload_next.src = next.href;
}

var prev = current_gallery[current - 1];
if(!prev){
prev = current_gallery[current_gallery.length - 1];
}
if(prev.type == 'img'){
var preload_prev = new Image();
preload_prev.src = prev.href;
}
}
};
var finishContent = function(){
var link = current_gallery[current];
if(!link) return; // invalid
hideLoading(function(){
listenKeyboard(true);
// fire onFinish hook
if(options.onFinish && typeof options.onFinish == 'function'){
options.onFinish(link.el);
}
});
};
var resizeContent = function(height, width, callback){
optimal_height = height;
optimal_width = width;
var resizable = RE.resize.test(current_gallery[current].type);
var dims = getDimensions(optimal_height, optimal_width, resizable);
if(callback){
var cb = function(){ callback(dims); };
switch(options.animSequence){
case 'hw':
adjustHeight(dims.height, dims.top, true, function(){
adjustWidth(dims.width, true, cb);
});
break;
case 'wh':
adjustWidth(dims.width, true, function(){
adjustHeight(dims.height, dims.top, true, cb);
});
break;
default:
adjustWidth(dims.width, true);
adjustHeight(dims.height, dims.top, true, cb);
}
}else{ 
adjustWidth(dims.width, false);
adjustHeight(dims.height, dims.top, false);
if(options.handleLgImages == 'resize' && resizable){
var content = SL.get('shadowbox_content');
if(content){
content.height = dims.i_height;
content.width = dims.i_width;
}
}
}
};
var getDimensions = function(o_height, o_width, resizable){
if(typeof resizable == 'undefined') resizable = false;
var height = o_height = parseInt(o_height);
var width = o_width = parseInt(o_width);
var shadowbox_b = SL.get('shadowbox_body');
var view_height = SL.getViewportHeight();
var extra_height = parseInt(SL.getStyle(shadowbox_b, 'border-top-width'), 10)
+ parseInt(SL.getStyle(shadowbox_b, 'border-bottom-width'), 10)
+ parseInt(SL.getStyle(shadowbox_b, 'margin-top'), 10)
+ parseInt(SL.getStyle(shadowbox_b, 'margin-bottom'), 10)
+ getComputedHeight(SL.get('shadowbox_title'))
+ getComputedHeight(SL.get('shadowbox_toolbar'))
+ (2 * options.viewportPadding);
if((height + extra_height) >= view_height){
height = view_height - extra_height;
}
var view_width = SL.getViewportWidth();
var extra_body_width = parseInt(SL.getStyle(shadowbox_b, 'border-left-width'), 10)
+ parseInt(SL.getStyle(shadowbox_b, 'border-right-width'), 10)
+ parseInt(SL.getStyle(shadowbox_b, 'margin-left'), 10)
+ parseInt(SL.getStyle(shadowbox_b, 'margin-right'), 10);
var extra_width = extra_body_width + (2 * options.viewportPadding);
if((width + extra_width) >= view_width){
width = view_width - extra_width;
}
var enableDrag = false;
var i_height = o_height;
var i_width = o_width;
var handle = options.handleLgImages;
if(resizable && (handle == 'resize' || handle == 'drag')){
var change_h = (o_height - height) / o_height;
var change_w = (o_width - width) / o_width;
if(handle == 'resize'){
if(change_h > change_w){
width = Math.round((o_width / o_height) * height);
}else if(change_w > change_h){
height = Math.round((o_height / o_width) * width);
}
i_width = width;
i_height = height;
}else{
// drag on oversized images only
var link = current_gallery[current];
if(link) enableDrag = link.type == 'img' && (change_h > 0 || change_w > 0);
}
}
return {
height: height,
width: width + extra_body_width,
i_height: i_height,
i_width: i_width,
top: ((view_height - (height + extra_height)) / 2) + options.viewportPadding,
enableDrag: enableDrag
};
};
var centerVertically = function(){
var shadowbox = SL.get('shadowbox');
var scroll = document.documentElement.scrollTop;
var s_top = scroll + Math.round((SL.getViewportHeight() - (shadowbox.offsetHeight || 0)) / 2);
SL.setStyle(shadowbox, 'top', s_top + 'px');
};
var adjustHeight = function(height, top, animate, callback){
height = parseInt(height);
current_height = height;
var sbi = SL.get('shadowbox_body_inner');
if(animate && options.animate){
SL.animate(sbi, {
height: { to: height }
}, options.resizeDuration, callback);
}else{
SL.setStyle(sbi, 'height', height + 'px');
if(typeof callback == 'function') callback();
}
if(absolute_pos){
centerVertically();
SL.addEvent(window, 'scroll', centerVertically);
top += document.documentElement.scrollTop;
}
var shadowbox = SL.get('shadowbox');
if(animate && options.animate){
SL.animate(shadowbox, {
top: { to: top }
}, options.resizeDuration);
}else{
SL.setStyle(shadowbox, 'top', top + 'px');
}
};
var adjustWidth = function(width, animate, callback){
width = parseInt(width);
current_width = width;
var shadowbox = SL.get('shadowbox');
if(animate && options.animate){
SL.animate(shadowbox, {
width: { to: width }
}, options.resizeDuration, callback);
}else{
SL.setStyle(shadowbox, 'width', width + 'px');
if(typeof callback == 'function') callback();
}
};
var listenKeyboard = function(on){
if(!options.enableKeys) return;
if(on){
document.onkeydown = handleKey;
}else{
document.onkeydown = '';
}
};
var assertKey = function(valid, key, code){
return (valid.indexOf(key) != -1 || valid.indexOf(code) != -1);
};
var handleKey = function(e){
var code = e ? e.which : event.keyCode;
var key = String.fromCharCode(code).toLowerCase();
if(assertKey(options.keysClose, key, code)){
Shadowbox.close();
}else if(assertKey(options.keysPrev, key, code)){
Shadowbox.previous();
}else if(assertKey(options.keysNext, key, code)){
Shadowbox.next();
}
};
var toggleTroubleElements = function(on){
var vis = (on ? 'visible' : 'hidden');
var selects = document.getElementsByTagName('select');
for(i = 0, len = selects.length; i < len; ++i){
selects[i].style.visibility = vis;
}
var objects = document.getElementsByTagName('object');
for(i = 0, len = objects.length; i < len; ++i){
objects[i].style.visibility = vis;
}
var embeds = document.getElementsByTagName('embed');
for(i = 0, len = embeds.length; i < len; ++i){
embeds[i].style.visibility = vis;
}
};
var showLoading = function(){
var loading = SL.get('shadowbox_loading');
overwriteHTML(loading, String.format(options.skin.loading,
options.loadingImage,
options.text.loading,
options.text.cancel));
loading.style.visibility = 'visible';
};
var hideLoading = function(callback){
var t = current_gallery[current].type;
var anim = (t == 'img' || t == 'html'); // fade on images & html
var loading = SL.get('shadowbox_loading');
if(anim){
fadeOut(loading, 0.35, callback);
}else{
loading.style.visibility = 'hidden';
callback();
}
};
var resizeOverlay = function(){
var overlay = SL.get('shadowbox_overlay');
SL.setStyle(overlay, {
height: '100%',
width: '100%'
});
SL.setStyle(overlay, 'height', SL.getDocumentHeight() + 'px');
if(!isSafari3){
SL.setStyle(overlay, 'width', SL.getDocumentWidth() + 'px');
}
};
var checkOverlayImgNeeded = function(){
if(!(isGecko && isMac)) return false;
var t;
for(var i = 0, len = current_gallery.length; i < len; ++i){
t = current_gallery[i].type;
if(t != 'img' && t != 'html') return true;
}
return false;
};
var toggleOverlay = function(callback){
var overlay = SL.get('shadowbox_overlay');
if(overlay_img_needed == null){
overlay_img_needed = checkOverlayImgNeeded();
}
if(callback){
resizeOverlay();
if(overlay_img_needed){
SL.setStyle(overlay, {
visibility: 'visible',
backgroundColor:'transparent',
backgroundImage:'url(' + options.overlayBgImage + ')',
backgroundRepeat: 'repeat',
opacity:1
});
callback();
}else{
SL.setStyle(overlay, {
visibility: 'visible',
backgroundColor:options.overlayColor,
backgroundImage:'none'
});
fadeIn(overlay, options.overlayOpacity, options.fadeDuration,
callback);
}
}else{
if(overlay_img_needed){
SL.setStyle(overlay, 'visibility', 'hidden');
}else{
fadeOut(overlay, options.fadeDuration);
}
overlay_img_needed = null;
}
};
Shadowbox.init = function(opts){
if(initialized) return;
options = apply(options, opts || {});
appendHTML(document.body, options.skin.main);
RE.img = new RegExp('\.(' + options.ext.img.join('|') + ')\s*$', 'i');
RE.qt = new RegExp('\.(' + options.ext.qt.join('|') + ')\s*$', 'i');
RE.wmp = new RegExp('\.(' + options.ext.wmp.join('|') + ')\s*$', 'i');
RE.qtwmp = new RegExp('\.(' + options.ext.qtwmp.join('|') + ')\s*$', 'i');
RE.iframe = new RegExp('\.(' + options.ext.iframe.join('|') + ')\s*$', 'i');
var id = null;
var resize = function(){
clearInterval(id);
id = null;
resizeOverlay();
resizeContent(optimal_height, optimal_width);
};
SL.addEvent(window, 'resize', function(){
if(activated){
if(id){
clearInterval(id);
id = null;
}
if(!id) id = setInterval(resize, 50);
}
});
SL.addEvent(SL.get('shadowbox_overlay'), 'click', function(){
Shadowbox.close();
});
if(absolute_pos){
SL.setStyle(SL.get('shadowbox_container'), 'position', 'absolute');
SL.setStyle('shadowbox_body', 'zoom', 1);
SL.addEvent(SL.get('shadowbox_container'), 'click', function(e){
var target = SL.getTarget(e);
if(target.id && target.id == 'shadowbox_container') Shadowbox.close();
});
}
if(!options.skipSetup) Shadowbox.setup();
initialized = true;
};
Shadowbox.setup = function(links, opts){
if(!links){
var links = [];
var a = document.getElementsByTagName('a'), rel;
for(var i = 0, len = a.length; i < len; ++i){
rel = a[i].getAttribute('rel');
if(rel && RE.rel.test(rel)) links[links.length] = a[i];
}
}else if(!links.length){
links = [links];
}
var link, key;
for(var i = 0, len = links.length; i < len; ++i){
link = links[i];
if(typeof link.shadowboxCacheKey == 'undefined'){
link.shadowboxCacheKey = cache.length;
SL.addEvent(link, 'click', handleClick);
}
cache[link.shadowboxCacheKey] = this.buildCacheObj(link, opts);
}
};
Shadowbox.buildCacheObj = function(link, opts){
var href = link.href;
var o = {
el: link,
title:link.getAttribute('title'),
href: href,
type: getPlayerType(href),
options:apply({}, opts || {})
};
var opt, l_opts = ['height', 'width', 'gallery'];
for(var i = 0, len = l_opts.length; i < len; ++i){
opt = l_opts[i];
if(typeof o.options[opt] != 'undefined'){
o[opt] = o.options[opt];
delete o.options[opt];
}
}
var rel = link.getAttribute('rel');
if(rel){
var match = rel.match(RE.gallery);
if(match) o.gallery = escape(match[1]);
var params = rel.split(';');
for(var i = 0, len = params.length; i < len; ++i){
match = params[i].match(RE.param);
if(match){
if(match[1] == 'options'){
eval('o.options = apply(o.options, ' + match[2] + ')');
}else{
o[match[1]] = match[2];
}
}
}
}

return o;
};
Shadowbox.open = function(link){
if(activated) return; 
activated = true;
setupGallery(link);
if(current_gallery.length){
openContent(link);
}else{
throw 'Shadowbox unable to open link, run setup() first';
}
};
Shadowbox.change = function(num){
if(!current_gallery) return; 
if(!current_gallery[num]){
if(!options.continuous){
return;
}else{
num = (num < 0) ? (current_gallery.length - 1) : 0; 
}
}
current = num;
toggleDrag(false);
setContent(null);
listenKeyboard(false);
showLoading();
hideBars(loadContent);
};
Shadowbox.next = function(){
return this.change(current + 1);
};
Shadowbox.previous = function(){
return this.change(current - 1);
};
Shadowbox.close = function(){
if(!activated) return;
listenKeyboard(false);
SL.setStyle(SL.get('shadowbox'), {
display: 'none',
visibility: 'hidden'
});
if(absolute_pos) SL.removeEvent(window, 'scroll', centerVertically);
toggleDrag(false);
setContent(null);
if(preloader){
preloader.onload = function(){};
preloader = null;
}
toggleOverlay(false);
toggleTroubleElements(true);
if(options.onClose && typeof options.onClose == 'function'){
var link = current_gallery[current];
if(link) options.onClose(link.el);
}

activated = false;
};
Shadowbox.movieMarkup = function(link){
var h = link.height ? parseInt(link.height, 10) : 300;
var w = link.width ? parseInt(link.width, 10) : 300;
var autoplay = options.autoplayMovies;
var controls = options.showMovieControls;
if(link.options){
if(link.options.autoplayMovies != null){
autoplay = link.options.autoplayMovies;
}
if(link.options.showMovieControls != null){
controls = link.options.showMovieControls;
}
}
var markup = {
tag:'object',
name: 'shadowbox_content'
};
switch(link.type){
case 'swf':
var dims = getDimensions(h, w, true);
h = dims.height;
w = dims.width;
markup.type = 'application/x-shockwave-flash';
markup.data = link.href;
markup.children = [
{ tag: 'param', name: 'movie', value: link.href }
];
break;
case 'flv':
autoplay = autoplay ? 'true' : 'false';
var showicons = 'false';
var a = h/w;
if(controls){
showicons = 'true';
h += 20;
}
var dims = getDimensions(h, h/a, true);
h = dims.height;
w = (h-(controls?20:0))/a;
var flashvars = [
'file=' + link.href,
'height=' + h,
'width=' + w,
'autostart=' + autoplay,
'displayheight=' + (h - (controls?20:0)),
'showicons=' + showicons,
'backcolor=0x000000&amp;frontcolor=0xCCCCCC&amp;lightcolor=0x557722'
];
markup.type = 'application/x-shockwave-flash';
markup.data = options.flvPlayer;
markup.children = [
{ tag: 'param', name: 'movie', value: options.flvPlayer },
{ tag: 'param', name: 'flashvars', value: flashvars.join('&amp;') },
{ tag: 'param', name: 'allowfullscreen', value: 'true' }
];
break;
case 'qt':
autoplay = autoplay ? 'true' : 'false';
if(controls){
controls = 'true';
h += 16;
}else{
controls = 'false';
}
markup.children = [
{ tag: 'param', name: 'src', value: link.href },
{ tag: 'param', name: 'scale', value: 'aspect' },
{ tag: 'param', name: 'controller', value: controls },
{ tag: 'param', name: 'autoplay', value: autoplay }
];
if(isIE){
markup.classid = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
markup.codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
}else{
markup.type = 'video/quicktime';
markup.data = link.href;
}
break;
case 'wmp':
autoplay = autoplay ? 1 : 0;
markup.children = [
{ tag: 'param', name: 'autostart', value: autoplay }
];
if(isIE){
if(controls){
controls = 'full';
h += 70;
}else{
controls = 'none';
}
markup.classid = 'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6';
markup.children[markup.children.length] = { tag: 'param', name: 'url', value: link.href };
markup.children[markup.children.length] = { tag: 'param', name: 'uimode', value: controls };
}else{
if(controls){
controls = 1;
h += 45;
}else{
controls = 0;
}
markup.type = 'video/x-ms-wmv';
markup.data = link.href;
markup.children[markup.children.length] = { tag: 'param', name: 'showcontrols', value: controls };
}
break;
}
markup.height = h; 
markup.width = w;
return markup;
};
Shadowbox.createHTML = function(obj){
var html = '<' + obj.tag;
for(var attr in obj){
if(attr == 'tag' || attr == 'html' || attr == 'children') continue;
if(attr == 'cls'){
html += ' class="' + obj['cls'] + '"';
}else{
html += ' ' + attr + '="' + obj[attr] + '"';
}
}
if(RE.empty.test(obj.tag)){
html += '/>\n';
}else{
html += '>\n';
var cn = obj.children;
if(cn){
for(var i = 0, len = cn.length; i < len; ++i){
html += this.createHTML(cn[i]);
}
}
if(obj.html) html += obj.html;
html += '</' + obj.tag + '>\n';
}
return html;
};
Shadowbox.getPlugins = function(){
return plugins;
};
Shadowbox.getOptions = function(){
return options;
};
Shadowbox.getCurrent = function(){
return current_gallery[current];
};
Shadowbox.version = function(){
return version;
};

})();
Array.prototype.indexOf = Array.prototype.indexOf || function(o){
for (var i = 0, len = this.length; i < len; ++i){
if(this[i] == o) return i;
}
return -1;
};
String.format = String.format || function(format){
var args = Array.prototype.slice.call(arguments, 1);
return format.replace(/\{(\d+)\}/g, function(m, i){
return args[i];
});
};
