// slimbox2
(function(w){var E=w(window),u,g,F=-1,o,x,D,v,y,L,s,n=!window.XMLHttpRequest,e=window.opera&&(document.compatMode=="CSS1Compat")&&(w.browser.version>=9.3),m=document.documentElement,l={},t=new Image(),J=new Image(),H,a,h,q,I,d,G,c,A,K;w(function(){w("body").append(w([H=w('<div id="lbOverlay" />')[0],a=w('<div id="lbCenter" />')[0],G=w('<div id="lbBottomContainer" />')[0]]).css("display","none"));h=w('<div id="lbImage" />').appendTo(a).append(q=w('<div style="position: relative;" />').append([I=w('<a id="lbPrevLink" href="#" />').click(B)[0],d=w('<a id="lbNextLink" href="#" />').click(f)[0]])[0])[0];c=w('<div id="lbBottom" />').appendTo(G).append([w('<a id="lbCloseLink" href="#" />').add(H).click(C)[0],A=w('<div id="lbCaption" />')[0],K=w('<div id="lbNumber" />')[0],w('<div style="clear: both;" />')[0]])[0]});w.slimbox=function(O,N,M){u=w.extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeEasing:"swing",initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},M);if(typeof O=="string"){O=[[O,N]];N=0}y=E.scrollTop()+((e?m.clientHeight:E.height())/2);L=u.initialWidth;s=u.initialHeight;w(a).css({top:Math.max(0,y-(s/2)),width:L,height:s,marginLeft:-L/2}).show();v=n||(H.currentStyle&&(H.currentStyle.position!="fixed"));if(v){H.style.position="absolute"}w(H).css("opacity",u.overlayOpacity).fadeIn(u.overlayFadeDuration);z();k(1);g=O;u.loop=u.loop&&(g.length>1);return b(N)};w.fn.slimbox=function(M,P,O){P=P||function(Q){return[Q.href,Q.title]};O=O||function(){return true};var N=this;return N.unbind("click").click(function(){var S=this,U=0,T,Q=0,R;T=w.grep(N,function(W,V){return O.call(S,W,V)});for(R=T.length;Q<R;++Q){if(T[Q]==S){U=Q}T[Q]=P(T[Q],Q)}return w.slimbox(T,U,M)})};function z(){var N=E.scrollLeft(),M=e?m.clientWidth:E.width();w([a,G]).css("left",N+(M/2));if(v){w(H).css({left:N,top:E.scrollTop(),width:M,height:E.height()})}}function k(M){w("object").add(n?"select":"embed").each(function(O,P){if(M){w.data(P,"slimbox",P.style.visibility)}P.style.visibility=M?"hidden":w.data(P,"slimbox")});var N=M?"bind":"unbind";E[N]("scroll resize",z);w(document)[N]("keydown",p)}function p(O){var N=O.keyCode,M=w.inArray;return(M(N,u.closeKeys)>=0)?C():(M(N,u.nextKeys)>=0)?f():(M(N,u.previousKeys)>=0)?B():false}function B(){return b(x)}function f(){return b(D)}function b(M){if(M>=0){F=M;o=g[F][0];x=(F||(u.loop?g.length:0))-1;D=((F+1)%g.length)||(u.loop?0:-1);r();a.className="lbLoading";l=new Image();l.onload=j;l.src=o}return false}function j(){a.className="";w(h).css({backgroundImage:"url("+o+")",visibility:"hidden",display:""});w(q).width(l.width);w([q,I,d]).height(l.height);w(A).html(g[F][1]||"");w(K).html((((g.length>1)&&u.counterText)||"").replace(/{x}/,F+1).replace(/{y}/,g.length));if(x>=0){t.src=g[x][0]}if(D>=0){J.src=g[D][0]}L=h.offsetWidth;s=h.offsetHeight;var M=Math.max(0,y-(s/2));if(a.offsetHeight!=s){w(a).animate({height:s,top:M},u.resizeDuration,u.resizeEasing)}if(a.offsetWidth!=L){w(a).animate({width:L,marginLeft:-L/2},u.resizeDuration,u.resizeEasing)}w(a).queue(function(){w(G).css({width:L,top:M+s,marginLeft:-L/2,visibility:"hidden",display:""});w(h).css({display:"none",visibility:"",opacity:""}).fadeIn(u.imageFadeDuration,i)})}function i(){if(x>=0){w(I).show()}if(D>=0){w(d).show()}w(c).css("marginTop",-c.offsetHeight).animate({marginTop:0},u.captionAnimationDuration);G.style.visibility=""}function r(){l.onload=null;l.src=t.src=J.src=o;w([a,h,c]).stop(true);w([I,d,h,G]).hide()}function C(){if(F>=0){r();F=x=D=-1;w(a).hide();w(H).stop().fadeOut(u.overlayFadeDuration,k)}return false}})(jQuery);

// addcaptions
(function(a){a.fn.addCaptions=function(c){var d={attributes:["longdesc","title","alt"],exclude:{src:[/recaptcha/]},allowBlankCaption:true,selector:"img",removeFloat:true,containerElement:"div",containerClass:"caption",titleElement:"p",titleClass:"caption-title",imageClass:""};a.extend(d,c||{});var b=a(this).find(d.selector);if(b.length){a.each(b,function(){for(var j in d.exclude){if(this[j]){for(var g=0;g<d.exclude[j].length;g++){if(this[j].match(d.exclude[j][g])){return}}}}var h=a(this).parent().get(0);if(h.tagName.toLowerCase()==d.containerElement&&a(h).hasClass(d.containerClass)){return true}var f="";for(var g=0;g<d.attributes.length;g++){f=a(this).attr(d.attributes[g]);if(f){break}}if(!f&&!d.allowBlankCaption){return true}var e=a(this).css("float");if(d.removeFloat){a(this).css("float","none")}if(d.imageClass){a(this).addClass(d.imageClass)}a(this).wrap("<"+d.containerElement+' class="'+d.containerClass+'" style="float: '+e+';"></'+d.containerElement+">");if(f){a(this).after("<"+d.titleElement+' class="'+d.titleClass+'">'+f+"</"+d.titleElement+">")}})}}})(jQuery);

tip = {
	sXHR: 'Loading...',
	sXHRError: 'Data not available',
	aObjects: [],
	bDOM: false,	// Is the browser DOM capable?
	oXHR: null,	// The common XMLHttpRequest instance

	init:function() {
		tip.initCompat();
		tip.initXHR();
		tip.addEvent(window, 'load', tip.processOnLoad);
	},

	processOnLoad:function() {
		tip.bDOM = document.getElementById && document.createTextNode;

		for (var i=0; i < tip.aObjects.length; i++) {
			tip.aObjects[i].onLoad();
		}
	},

	initCompat:function() {
		if (!document.ELEMENT_NODE) {
			document.ELEMENT_NODE = 1;
			document.ATTRIBUTE_NODE = 2;
			document.TEXT_NODE = 3;
			document.CDATA_SECTION_NODE = 4;
			document.ENTITY_REFERENCE_NODE = 5;
			document.ENTITY_NODE = 6;
			document.PROCESSING_INSTRUCTION_NODE = 7;
			document.COMMENT_NODE = 8;
			document.DOCUMENT_NODE = 9;
			document.DOCUMENT_TYPE_NODE = 10;
			document.DOCUMENT_FRAGMENT_NODE = 11;
			document.NOTATION_NODE = 12;
		}
	},

	initXHR:function() {
		if (window.XMLHttpRequest) {
			tip.oXHR = new XMLHttpRequest();
		}
		if (!tip.oXHR && window.ActiveXObject) {
			var aSignatures = [
				'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0',
				'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP',
				'Microsoft.XMLHTTP'];
			for (var i=0; i < aSignatures.length && !tip.oXHR; i++) {
				try {
					tip.oXHR = new ActiveXObject(aSignatures[i]);
				} catch (oError) {
					tip.oXHR = null;
				}
			}
		}
		if (!tip.oXHR && window.createRequest) {
			try {
				tip.oXHR = window.createRequest();
			} catch (oError) {
				tip.oXHR = null;
			}
		}
	},

	addEvent:function(o, sEvent, fnCallback) {
		if (o.addEventListener) {
			o.addEventListener(sEvent, fnCallback, false);
		} else if (o.attachEvent) {
			o.attachEvent('on' + sEvent, fnCallback);
		} else if (typeof(o['on' + sEvent]) == 'function') {
			var fnOldCallback = o['on' + sEvent];
			o['on' + sEvent] = function() {
				fnOldCallback();
				fnCallback();
			}
		} else {
			o['on' + sEvent] = fnCallback;
		}
	},

	onFalse:function() {
		return false;
	},

	isElement:function(o, sTag) {
		return o.nodeType == document.ELEMENT_NODE && (sTag == null || o.tagName.toLowerCase() == sTag);
	},
		
	parentElement:function(o, sTag) {
		while (o && !tip.isElement(o, sTag)) {
			o = o.parentNode;
		}
		return o;
	},

	firstChildElement:function(o, sTag) {
		while (o) {
			o = o.firstChild;
			if (o && tip.isElement(o, sTag)) {
				break;
			}
		}
		return o;
	},

	nextElement:function(o, sTag) {
		while (o && !tip.isElement(o, sTag)) {
			o = o.nextSibling;
		}
		return o;
	},

	cancelPropagation:function(oEvent) {
		if (!oEvent) {
			oEvent = window.event;
		}

		if (oEvent.preventDefault) {
			oEvent.preventDefault();
		}
		oEvent.returnValue = false;

		if (oEvent.stopPropagation) {
			oEvent.stopPropagation();
		}
		oEvent.cancelBubble = true;
	},

	/* The following code is adapted from:
	 * http://www.alistapart.com/articles/crossbrowserscripting
	 * by Anthony T. Holdener III */
	importNode:function(o, bSubrequest) {
		var oResult = null;

		switch (o.nodeType) {
		case document.ELEMENT_NODE:
			oResult = document.createElement(o.nodeName);
			if (o.attributes) {
				for (var i = 0; i < o.attributes.length; ++i) {
					oResult.setAttribute(o.attributes[i].nodeName, o.getAttribute(o.attributes[i].nodeName));
				}
			}
			if (o.childNodes) {
				for (var i = 0; i < o.childNodes.length; ++i) {
		  			oResult.appendChild(tip.importNode(o.childNodes[i], true));
				}
			}
			break;
		case document.TEXT_NODE:
		case document.CDATA_SECTION_NODE:
		case document.COMMENT_NODE:
			oResult = document.createTextNode(o.nodeValue);
			break;
		}

		// Needed to make the fucking explorer happy
		if (!bSubrequest && !document.importNode) {
			oResult.innerHTML = oResult.innerHTML;
		}

		return oResult;
	},

	getXHR_ul:function(oUL, sUrl) {
		var oLI, oSPAN, oText;
		oLI = document.createElement('li');
		oSPAN = document.createElement('span');
		oText = document.createTextNode(tip.sXHR);

		oSPAN.setAttribute('class', 'loading');
		oSPAN.appendChild(oText);
		oLI.appendChild(oSPAN);
		oUL.appendChild(oLI);

		tip.oXHR.open('get', sUrl, true);
		tip.oXHR.setRequestHeader('If-Modified-Since', 'Thu, 01 Jan 1970 00:00:00 GMT');
		tip.oXHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
		tip.oXHR.onreadystatechange = function() {
			switch (tip.oXHR.readyState) {
			case 1: break;
			case 4: var o;
				if (tip.oXHR.status == 200) {
					oUL.removeChild(oLI);
					o = tip.nextElement(tip.oXHR.responseXML.firstChild);
					o = tip.nextElement(o.firstChild);
					o = o.firstChild;
					while (o = tip.nextElement(o)) {
						oUL.appendChild(tip.importNode(o));
						o = o.nextSibling;
					}
				} else {
					oSPAN.replaceChild(document.createTextNode(tip.sXHRError), oText);
				}
				break;
			default:return;
			}
		}
		tip.oXHR.send(null);
	}
}

ntd = {
	aPanels: ['idPanel'],
	sExpanded: 'opened',
	sCollapsed: 'closed',

	init: function() {
		// Force submenu hiding to avoid FOUC
		var aStyles = new Array();
		for (var iStyle = 0; iStyle < ntd.aPanels.length; ++ iStyle) {
			aStyles[iStyle] = '#' + ntd.aPanels[iStyle] + ' ul ul';
		}
		document.write('<style>\n' + aStyles.join(',\n') + ' {display: none}\n</style>');
		tip.aObjects.push(this);
	},

	onLoad:function() {
		// TODO: if not pass this test, a fallback callback must be
		// provided (to open the closed branches for FOUC avoiding)
		if (!tip.bDOM) {
			return;
		}

  		var oPanel, aEM;
		for (var iPanel = 0; iPanel < ntd.aPanels.length; ++ iPanel) {
			oPanel = document.getElementById(ntd.aPanels[iPanel]);
			if (!oPanel)
				continue;

			aEM = oPanel.getElementsByTagName('em');
			if (aEM) {
				for (var i = 0; i < aEM.length; ++ i) {
					ntd.prepareBranch(aEM[i]);
				}
			}
		}
	},

	prepareBranch:function(oEM) {
  		var oA;

		oA = oEM.parentNode;
		if (oA.tagName.toLowerCase() == 'a') {
			// Ajax branch
			if (tip.oXHR) {
				oA.className = ntd.sCollapsed;
				oA._oldUrl = oA.getAttribute('href');
				oA.setAttribute('href', '#');
				oA.onClick = tip.onFalse;
				tip.addEvent(oA, 'click', ntd.onAjaxClick);
				ntd.switchFolding(oA, false);
			}
		} else {
			// Embedded branch
			oA = document.createElement('a');
			oA.className = ntd.sCollapsed;
			oA.setAttribute('href', '#');
			oA.onClick = tip.onFalse;
			tip.addEvent(oA, 'click', ntd.onMenuClick);
			oEM.parentNode.replaceChild(oA, oEM);
			oA.appendChild(oEM);
			ntd.switchFolding(oA, false);
		}
	},

	switchFolding:function(oA, bToSwitch) {
		if (bToSwitch == null)
			bToSwitch = true;

		var oUL = tip.nextElement(oA, 'ul');
		var bCollapse;
		if (oUL) {
			bCollapse = oUL.className != ntd.sExpanded ^ bToSwitch;
			oUL.className = bCollapse ? ntd.sCollapsed : ntd.sExpanded;
		} else {
			bCollapse = oA.className != ntd.sExpanded ^ bToSwitch;
		}

		oA.className = bCollapse ? ntd.sCollapsed : ntd.sExpanded;
	},

	onMenuClick:function(oEvent) {
		var oA = tip.parentElement(oEvent.target ? oEvent.target : oEvent.srcElement, 'a');
		if (oA) {
			ntd.switchFolding(oA);
		}

		tip.cancelPropagation(oEvent);
	},

	onAjaxClick:function(oEvent) {
		var oA = tip.parentElement(oEvent.target ? oEvent.target : oEvent.srcElement, 'a');
		if (oA) {
			var o = tip.nextElement(oA, 'ul');
			if (!o) {
				o = document.createElement('ul');
				oA.parentNode.appendChild(o);
				tip.getXHR_ul(o, oA._oldUrl);
			}
			ntd.switchFolding(oA);
		}

		tip.cancelPropagation(oEvent);
	}
}

tip.init();
ntd.init();

if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
    jQuery(function($) {

	$("a[href^='http://picasaweb.google.'] > img:first-child[src]").parent().slimbox({}, function(el) {
	    return [el.firstChild.src.replace(/\/s\d+(?:\-c)?\/([^\/]+)$/, "/s800/$1"),
		(el.title || el.firstChild.alt) + '<br /><a href="' + el.href + '">Picasa Web Albums page</a>'];
	}),

	$('div.wiki').addCaptions({
	    selector: 'a.picasa2'
	})

    });
}
