function $A(ar) { for (var i=0,r=[]; i<ar.length; r.push(ar[i++])); return r; }
Object.extend = function (dst,src) { for (var i in src) dst[i]=src[i]; }
function $(a) { return document.getElementById(a); }

if (typeof Function.prototype.bind !== 'function') {
	Function.prototype.bind = function () {
		if (arguments.length < 2 && arguments[0] === undefined) return this;
		var __method=this,args=$A(arguments), context=args.shift();
			var ret=function () {
				return __method.apply(context,args.concat(arguments));
			}
		return ret;
	}
	Function.prototype.curry = function () {
		if (!arguments.length) return this;
		var __method = this, args = $A(arguments);
		var ret=function() {
			return __method.apply(this, args.concat(arguments));
		}
		return ret;
	}
}
function observe(el,ev,fn) {
	if (!!el.addEventListener) return el.addEventListener(ev,fn.curry(el),false);
	if (!!el.attachEvent) return el.attachEvent('on'+ev,fn.curry(el));
	return false;
}
function Gallery() {
	this.initialize.apply(this,arguments);
}
Gallery.prototype= {
			initialize: function (data) {
				$('gTitle').innerHTML = data.name;
				$('content').innerHTML = data.content;
				this.folder=data.folder;
				this.images = data.images;
				this.captions = data.captions;
				this.ctr=0;
				this.display();
				this.piccache=[];
				for (var i=0; i<this.images.length; i++) {
					this.piccache.push(this.cache(this.folder+'/'+this.images[i]));
				}
				if (this.images.length==0) $('picNext').style.display='none';
				else {
					observe($('picNext'),'click',this.nextClick.bind(this));
					$('picNext').style.display='block';
				}
			},
			display: function () {
				$('picGroup').innerHTML='<img src="'+this.folder+'/'+this.images[this.ctr]+'" />';
				$('caption').innerHTML=this.captions[this.ctr];
			},
			nextClick: function () {
				this.ctr++;
				if (this.ctr>=this.images.length) 
					this.ctr=0;
				this.display();
			},
			cache: function (src) {
				var img=new Image();
				img.src=src;
				return img;
			}

};

