var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);}}}
Object.extend = function(destination, source) {
for (property in source) destination[property] = source[property];
return destination;}
Function.prototype.bind = function(object) {
var __method = this;
return function() {
return __method.apply(object, arguments);}}
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
__method.call(object, event || window.event);}}
function $lb$() {
if (arguments.length == 1) return get$lb$(arguments[0]);
var elements = [];
$c(arguments).each(function(el){
elements.push(get$lb$(el));
});
return elements;
function get$lb$(el){
if (typeof el == 'string') el = document.getElementById(el);
return el;}}
if (!window.Element) var Element = new Object();
Object.extend(Element, {
remove: function(element) {
element = $lb$(element);
element.parentNode.removeChild(element);},
hasClassName: function(element, className) {
element = $lb$(element);
if (!element) return;
var hasClass = false;
element.className.split(' ').each(function(cn){
if (cn == className) hasClass = true;
});
return hasClass;},
addClassName: function(element, className) {
element = $lb$(element);
Element.removeClassName(element, className);
element.className += ' ' + className;},
removeClassName: function(element, className) {
element = $lb$(element);
if (!element) return;
var newClassName = '';
element.className.split(' ').each(function(cn, i){
if (cn != className){
if (i > 0) newClassName += ' ';
newClassName += cn;}});
element.className = newClassName;},
cleanWhitespace: function(element) {
element = $lb$(element);
$c(element.childNodes).each(function(node){
if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) Element.remove(node);});},
find: function(element, what) {
element = $lb$(element)[what];
while (element.nodeType != 1) element = element[what];
return element;}});
var Position = {
cumulativeOffset: function(element) {
var valueT = 0, valueL = 0;
do {
valueT += element.offsetTop  || 0;
valueL += element.offsetLeft || 0;
element = element.offsetParent;
} while (element);
return [valueL, valueT];}};
document.getElementsByClassName = function(className) {
var children = document.getElementsByTagName('*') || document.all;
var elements = [];
$c(children).each(function(child){
if (Element.hasClassName(child, className)) elements.push(child);});  
return elements;}
Array.prototype.iterate = function(func){
for(var i=0;i<this.length;i++) func(this[i], i);}
if (!Array.prototype.each) Array.prototype.each = Array.prototype.iterate;
function $c(array){
var nArray = [];
for (var i=0;i<array.length;i++) nArray.push(array[i]);
return nArray;}
/**/
var fx = new Object();
fx.Base = function(){};
fx.Base.prototype = {
setOptions: function(options) {
this.options = {
duration: 500,
onComplete: '',
transition: fx.sinoidal}
Object.extend(this.options, options || {});},
step: function() {
var time  = (new Date).getTime();
if (time >= this.options.duration+this.startTime) {
this.now = this.to;
clearInterval (this.timer);
this.timer = null;
if (this.options.onComplete) setTimeout(this.options.onComplete.bind(this), 10);}
else {
var Tpos = (time - this.startTime) / (this.options.duration);
this.now = this.options.transition(Tpos) * (this.to-this.from) + this.from;}
this.increase();},
custom: function(from, to) {
if (this.timer != null) return;
this.from = from;
this.to = to;
this.startTime = (new Date).getTime();
this.timer = setInterval (this.step.bind(this), 13);},
hide: function() {
this.now = 0;
this.increase();},
clearTimer: function() {
clearInterval(this.timer);
this.timer = null;}}
fx.Layout = Class.create();
fx.Layout.prototype = Object.extend(new fx.Base(), {
initialize: function(el, options) {
this.el = $lb$(el);
this.el.style.overflow = "hidden";
this.iniWidth = this.el.offsetWidth;
this.iniHeight = this.el.offsetHeight;
this.setOptions(options);}});
fx.Height = Class.create();
Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), {	
increase: function() {
this.el.style.height = this.now + "px";},
toggle: function() {
if (this.el.offsetHeight > 0) this.custom(this.el.offsetHeight, 0);
else this.custom(0, this.el.scrollHeight);}});
fx.Width = Class.create();
Object.extend(Object.extend(fx.Width.prototype, fx.Layout.prototype), {	
increase: function() {
this.el.style.width = this.now + "px";},
toggle: function(){
if (this.el.offsetWidth > 0) this.custom(this.el.offsetWidth, 0);
else this.custom(0, this.iniWidth);}});
fx.Opacity = Class.create();
fx.Opacity.prototype = Object.extend(new fx.Base(), {
initialize: function(el, options) {
this.el = $lb$(el);
this.now = 1;
this.increase();
this.setOptions(options);},
increase: function() {
if (this.now == 1 && (/Firefox/.test(navigator.userAgent))) this.now = 0.9999;
this.setOpacity(this.now);},
setOpacity: function(opacity) {
if (opacity == 0 && this.el.style.visibility != "hidden") this.el.style.visibility = "hidden";
else if (this.el.style.visibility != "visible") this.el.style.visibility = "visible";
if (window.ActiveXObject) this.el.style.filter = "alpha(opacity=" + opacity*100 + ")";
this.el.style.opacity = opacity;},
toggle: function() {
if (this.now > 0) this.custom(1, 0);
else this.custom(0, 1);}});
fx.sinoidal = function(pos){
return ((-Math.cos(pos*Math.PI)/2) + 0.5);}
fx.linear = function(pos){
return pos;}
fx.cubic = function(pos){
return Math.pow(pos, 3);}
fx.circ = function(pos){
return Math.sqrt(pos);}
/**/
var fileLoadingImage = "px/loading.gif";
var fileBottomNavCloseImage = "px/closelabel.gif";
var resizeSpeed = 8;	// controls the speed of the image resizing (1=slowest and 10=fastest)
var borderSize = 10;	//if you adjust the padding in the CSS, you will need to update this variable
var imageArray = new Array;
var activeImage;
if(resizeSpeed > 10){ resizeSpeed = 10;}
if(resizeSpeed < 1){ resizeSpeed = 1;}
resizeDuration = (11 - resizeSpeed) * 100;
Object.extend(Element, {
hide: function() {
for (var i = 0; i < arguments.length; i++) {
var element = $lb$(arguments[i]);
element.style.display = 'none';}},
show: function() {
for (var i = 0; i < arguments.length; i++) {
var element = $lb$(arguments[i]);
element.style.display = '';}},
getWidth: function(element) {
element = $lb$(element);
return element.offsetWidth; },
setWidth: function(element,w) {
element = $lb$(element);
element.style.width = w +"px";},
getHeight: function(element) {
element = $lb$(element);
return element.offsetHeight;},
setHeight: function(element,h) {
element = $lb$(element);
element.style.height = h +"px";},
setTop: function(element,t) {
element = $lb$(element);
element.style.top = t +"px";},
setSrc: function(element,src) {
element = $lb$(element);
element.src = src; },
setInnerHTML: function(element,content) {
element = $lb$(element);
element.innerHTML = content;}});
Array.prototype.removeDuplicates = function () {
for(i = 1; i < this.length; i++){
if(this[i][0] == this[i-1][0]){
this.splice(i,1);}}}
Array.prototype.empty = function () {
for(i = 0; i <= this.length; i++){
this.shift();}}
var Lightbox = Class.create();
Lightbox.prototype = {
initialize: function() {
if (!document.getElementsByTagName){ return; }
var anchors = document.getElementsByTagName('a');
for (var i=0; i<anchors.length; i++){
var anchor = anchors[i];
var relAttribute = String(anchor.getAttribute('rel'));
if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
anchor.onclick = function () {myLightbox.start(this); return false;}}}
var objBody = document.getElementsByTagName("body").item(0);
var objOverlay = document.createElement("div");
objOverlay.setAttribute('id','overlay');
objOverlay.onclick = function() { myLightbox.end(); return false; }
objBody.appendChild(objOverlay);
var objLightbox = document.createElement("div");
objLightbox.setAttribute('id','lightbox');
objLightbox.style.display = 'none';
objBody.appendChild(objLightbox);
var objOuterImageContainer = document.createElement("div");
objOuterImageContainer.setAttribute('id','outerImageContainer');
objLightbox.appendChild(objOuterImageContainer);
var objImageContainer = document.createElement("div");
objImageContainer.setAttribute('id','imageContainer');
objOuterImageContainer.appendChild(objImageContainer);
var objLightboxImage = document.createElement("img");
objLightboxImage.setAttribute('id','lightboxImage');
objImageContainer.appendChild(objLightboxImage);
var objHoverNav = document.createElement("div");
objHoverNav.setAttribute('id','hoverNav');
objImageContainer.appendChild(objHoverNav);
var objPrevLink = document.createElement("a");
objPrevLink.setAttribute('id','prevLink');
objPrevLink.setAttribute('href','#');
objHoverNav.appendChild(objPrevLink);
var objNextLink = document.createElement("a");
objNextLink.setAttribute('id','nextLink');
objNextLink.setAttribute('href','#');
objHoverNav.appendChild(objNextLink);
var objLoading = document.createElement("div");
objLoading.setAttribute('id','loading');
objImageContainer.appendChild(objLoading);
var objLoadingLink = document.createElement("a");
objLoadingLink.setAttribute('id','loadingLink');
objLoadingLink.setAttribute('href','#');
objLoadingLink.onclick = function() { myLightbox.end(); return false; }
objLoading.appendChild(objLoadingLink);
var objLoadingImage = document.createElement("img");
objLoadingImage.setAttribute('src', fileLoadingImage);
objLoadingLink.appendChild(objLoadingImage);
var objImageDataContainer = document.createElement("div");
objImageDataContainer.setAttribute('id','imageDataContainer');
objImageDataContainer.className = 'clearfix';
objLightbox.appendChild(objImageDataContainer);
var objImageData = document.createElement("div");
objImageData.setAttribute('id','imageData');
objImageDataContainer.appendChild(objImageData);
var objImageDetails = document.createElement("div");
objImageDetails.setAttribute('id','imageDetails');
objImageData.appendChild(objImageDetails);
var objCaption = document.createElement("span");
objCaption.setAttribute('id','caption');
objImageDetails.appendChild(objCaption);
var objNumberDisplay = document.createElement("span");
objNumberDisplay.setAttribute('id','numberDisplay');
objImageDetails.appendChild(objNumberDisplay);
var objBottomNav = document.createElement("div");
objBottomNav.setAttribute('id','bottomNav');
objImageData.appendChild(objBottomNav);
var objBottomNavCloseLink = document.createElement("a");
objBottomNavCloseLink.setAttribute('id','bottomNavClose');
objBottomNavCloseLink.setAttribute('href','#');
objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
objBottomNav.appendChild(objBottomNavCloseLink);
var objBottomNavCloseImage = document.createElement("img");
objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
overlayEffect = new fx.Opacity(objOverlay, { duration: 300 });	
overlayEffect.hide();
imageEffect = new fx.Opacity(objLightboxImage, { duration: 350, onComplete: function() { imageDetailsEffect.custom(0,1); }});
imageEffect.hide();
imageDetailsEffect = new fx.Opacity('imageDataContainer', { duration: 400, onComplete: function() { navEffect.custom(0,1); }}); 
imageDetailsEffect.hide();
navEffect = new fx.Opacity('hoverNav', { duration: 100 });
navEffect.hide();},
start: function(imageLink) {
hideSelectBoxes();
hideObjetos();
var arrayPageSize = getPageSize();
Element.setHeight('overlay', arrayPageSize[1]);
overlayEffect.custom(0,0.8);
imageArray = [];
imageNum = 0;		
if (!document.getElementsByTagName){ return; }
var anchors = document.getElementsByTagName('a');
if((imageLink.getAttribute('rel') == 'lightbox')){
imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			
} else {
for (var i=0; i<anchors.length; i++){
var anchor = anchors[i];
if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));}}
imageArray.removeDuplicates();
while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}}
var arrayPageSize = getPageSize();
var arrayPageScroll = getPageScroll();
var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);
Element.setTop('lightbox', lightboxTop);
Element.show('lightbox');
this.changeImage(imageNum);},
changeImage: function(imageNum) {
activeImage = imageNum;
Element.show('loading');
imageDetailsEffect.hide();
imageEffect.hide();
navEffect.hide();
Element.hide('prevLink');
Element.hide('nextLink');
Element.hide('numberDisplay');
imgPreloader = new Image();
imgPreloader.onload=function(){
Element.setSrc('lightboxImage', imageArray[activeImage][0]);
myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);}
imgPreloader.src = imageArray[activeImage][0];},
resizeImageContainer: function( imgWidth, imgHeight) {
this.wCur = Element.getWidth('outerImageContainer');
this.hCur = Element.getHeight('outerImageContainer');
wDiff = (this.wCur - borderSize * 2) - imgWidth;
hDiff = (this.hCur - borderSize * 2) - imgHeight;
reHeight = new fx.Height('outerImageContainer', { duration: resizeDuration });
reHeight.custom(Element.getHeight('outerImageContainer'),imgHeight+(borderSize*2)); 
reWidth = new fx.Width('outerImageContainer', { duration: resizeDuration, onComplete: function() { imageEffect.custom(0,1); }});
reWidth.custom(Element.getWidth('outerImageContainer'),imgWidth+(borderSize*2));
if((hDiff == 0) && (wDiff == 0)){
if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} }
Element.setHeight('prevLink', imgHeight);
Element.setHeight('nextLink', imgHeight);
Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2));
Element.setWidth( 'hoverNav', imgWidth + (borderSize * 2));
this.showImage();},
showImage: function(){
Element.hide('loading');
myLightbox.updateDetails(); 
this.preloadNeighborImages();},
updateDetails: function() {
Element.show('caption');
Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
if(imageArray.length > 1){
Element.show('numberDisplay');
//Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);}
Element.setInnerHTML( 'numberDisplay', eval(activeImage + 1) + " / " + imageArray.length);}
myLightbox.updateNav();},
updateNav: function() {
if(activeImage != 0){
Element.show('prevLink');
document.getElementById('prevLink').onclick = function() {
myLightbox.changeImage(activeImage - 1); return false;}}
if(activeImage != (imageArray.length - 1)){
Element.show('nextLink');
document.getElementById('nextLink').onclick = function() {
myLightbox.changeImage(activeImage + 1); return false;}}
this.enableKeyboardNav();},
enableKeyboardNav: function() {
document.onkeydown = this.keyboardAction; },
disableKeyboardNav: function() {
document.onkeydown = '';},
keyboardAction: function(e) {
if (e == null) {
keycode = event.keyCode;} else {
keycode = e.which;}
key = String.fromCharCode(keycode).toLowerCase();
if((key == 'x') || (key == 'o') || (key == 'c')){
myLightbox.end();} else if(key == 'i'){
if(activeImage != 0){
myLightbox.disableKeyboardNav();
myLightbox.changeImage(activeImage - 1);}
} else if(key == 'n'){
if(activeImage != (imageArray.length - 1)){
myLightbox.disableKeyboardNav();
myLightbox.changeImage(activeImage + 1);}}},
preloadNeighborImages: function(){
if((imageArray.length - 1) > activeImage){
preloadNextImage = new Image();
preloadNextImage.src = imageArray[activeImage + 1][0];}
if(activeImage > 0){
preloadPrevImage = new Image();
preloadPrevImage.src = imageArray[activeImage - 1][0];}},
end: function() {
this.disableKeyboardNav();
Element.hide('lightbox');
imageEffect.toggle();
overlayEffect.custom(0.8,0);
showSelectBoxes();
showObjetos();}}
function getPageScroll(){
var yScroll;
if (self.pageYOffset) {
yScroll = self.pageYOffset;
} else if (document.documentElement && document.documentElement.scrollTop){
yScroll = document.documentElement.scrollTop;
} else if (document.body) {
yScroll = document.body.scrollTop;}
arrayPageScroll = new Array('',yScroll) 
return arrayPageScroll;}
function getPageSize(){
var xScroll, yScroll;
if (window.innerHeight && window.scrollMaxY) {	
xScroll = document.body.scrollWidth;
yScroll = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight){
xScroll = document.body.scrollWidth;
yScroll = document.body.scrollHeight;
} else {
xScroll = document.body.offsetWidth;
yScroll = document.body.offsetHeight;}
var windowWidth, windowHeight;
if (self.innerHeight) {
windowWidth = self.innerWidth;
windowHeight = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) {
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else if (document.body) {
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight;}	
if(yScroll < windowHeight){
pageHeight = windowHeight;
} else { 
pageHeight = yScroll;}
if(xScroll < windowWidth){	
pageWidth = windowWidth;
} else {
pageWidth = xScroll;}
arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
return arrayPageSize;}
function getKey(e){
if (e == null) {
keycode = event.keyCode;
} else {
keycode = e.which;}
key = String.fromCharCode(keycode).toLowerCase();
if(key == 'x'){}}
function listenKey () {	document.onkeypress = getKey; }
function showSelectBoxes(){
selects = document.getElementsByTagName("select");
for (i = 0; i != selects.length; i++) {
selects[i].style.visibility = "visible";}}
function hideSelectBoxes(){
selects = document.getElementsByTagName("select");
for (i = 0; i != selects.length; i++) {
selects[i].style.visibility = "hidden";}}
function pause(numberMillis) {
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true) {
now = new Date();
if (now.getTime() > exitTime)
return;}}
function initLightbox() { myLightbox = new Lightbox(); }

function showObjetos() {
  objs = document.getElementsByTagName("object");
  for (i = 0; i != objs.length; i++) {
    objs[i].style.visibility = "visible";
  }
  objs2 = document.getElementsByTagName("embed");
  for (i = 0; i != objs2.length; i++) {
    objs2[i].style.visibility = "visible";
  } 
}
function hideObjetos() {
  objs = document.getElementsByTagName("object");
  for (i = 0; i != objs.length; i++) {
    objs[i].style.visibility = "hidden";
  }
  objs2 = document.getElementsByTagName("embed");
  for (i = 0; i != objs2.length; i++) {
    objs2[i].style.visibility = "hidden";
  } 
}

