(function() {
	var TINY = {};

	function $(i) {
		return document.getElementById(i)
	}
	function $$(e, p) {
		p = p || document;
		return p.getElementsByTagName(e)
	}

	TINY.slideshow = function(n) {
		this.infoSpeed = this.imgSpeed = this.speed = 10;
		this.thumbOpacity = this.navHover = 70;
		this.navOpacity = 25;
		this.scrollSpeed = 5;
		this.letterbox = '#000';
		this.n = n;
		this.c = 0;
		this.a = [];
	};

	TINY.slideshow.prototype = {
		init : function(s, z, b, f, q) {
			s = $(s);
			var ref = this;
			var m = $$('li', s);
			var i = 0;
			var w = 0;
			this.l = m.length;
			this.q = $(q);
			this.f = $(z);
			this.r = $(this.info);
			this.o = parseInt(TINY.style.val(z, 'width'));
			if (this.thumbs) {
				var u = $(this.left), r = $(this.right);
				u.onmouseover = function (){
					TINY.scroll.init (ref.thumbs ,-1,ref.scrollSpeed);
				};
				u.onmouseout = r.onmouseout = function(){
					TINY.scroll.cl(ref.thumbs);	
				};
				r.onmouseover = function(){
					TINY.scroll.init(ref.thumbs,1,ref.scrollSpeed );
				};
				this.p = $(this.thumbs);
			}
			var xx = this;
			for (var i = 0; i < this.l; i++) {
				this.a[i] = {};
				var h = m[i], a = this.a[i];
				a.t = $$('h3', h)[0].innerHTML; // title
				
				a.d = $$('p', h)[0].innerHTML; // descr
				
				a.l = $$('a', h)[0] ? $$('a', h)[0].href : ''; // link dell immagine (al click)
				
				a.p = $$('span', h)[0].innerHTML; // full size img
				
				if (this.thumbs) {
					var g = $$('strong', h)[0];
					if(g){
						this.p.appendChild(g);
						jQuery(g).click(jQuery.proxy(function(){
							ref.go(this.i,1);
							if(typeof(ref.loop)!=='undefined'){
								clearInterval(ref.loop);
							}
						}, {'i':i}));
					}else{
					
						var g = $$('img', h)[0];
						this.p.appendChild(g);
						var ii = new Image();
						ii.onload = function(){
							w+=parseInt(this.width, 10)+5;
							xx.p.style.width=w+'px';
						};
						ii.src = g.src; 
								
						g.style.opacity = this.thumbOpacity / 100;
						g.style.filter = 'alpha(opacity=' + this.thumbOpacity + ')';
						g.onmouseover = jQuery.proxy(function(){
							TINY.alpha.set(this.g,100,5);
						}, {'g':g});
						g.onmouseout = jQuery.proxy(function(){
							TINY.alpha.set(this.g, ref.thumbOpacity ,5);
						}, {'g':g});
						jQuery(g).click(jQuery.proxy(function(){
							ref.go(this.i,1);
						}, {'i':i}));
					}
					 
				}
			}

			
			if (b && f) {
				var b = $(b);
				var f = $(f);
				b.style.opacity = f.style.opacity = this.navOpacity / 100;
				b.style.filter = f.style.filter = 'alpha(opacity=' + this.navOpacity + ')';
				b.onmouseover = function(){
					TINY.alpha.set(b,ref.navHover ,5);
				};
				f.onmouseover = function(){
					TINY.alpha.set(f,ref.navHover ,5);
				};
				
				b.onmouseout = function(){
					TINY.alpha.set(b,ref.navOpacity,5);
				};
				f.onmouseout = function(){
					TINY.alpha.set(f,ref.navOpacity,5);
				};
				b.onclick = function(){
					ref.mv(-1,1);	
					if(typeof(ref.loop)!=='undefined'){
						clearInterval(ref.loop);
					}
				};
				
				f.onclick = function(){
					ref.mv(1,1);
					if(typeof(ref.loop)!=='undefined'){
						clearInterval(ref.loop);
					}
				};
			}
			this.auto ? this.is(0, 0) : this.is(0, 1);
			if(this.auto){
				this.loop = setInterval(function(){
					ref.mv(1,1);
				}, this.speed*1000);
			}
			
		},
		
		go:function(pos, clear){
			this.mv(pos-this.c, clear);
		},
		
		
		mv : function(d, clear) {
			var t = this.c + d;
			this.c = t = t < 0 ? this.l - 1 : t > this.l - 1 ? 0 : t;
			this.pr(t, clear);
		},
		pr : function(t, clear) {
			clearTimeout(this.showInfoTout);
			if (clear) {
				clearTimeout(this.at);
			}
			this.c = t;
			this.is(t, clear);
		},
		is : function(s, clear) {
			if (this.info) {
				TINY.height.set(this.r, 1, this.infoSpeed / 2, -1); // chiudo il div delle info
			}
			var i = new Image();
			this.i = i;
			var ref = this;
			i.onload = function(){
				ref.showImage(s , clear);
			};
			i.src = this.a[s].p;
			
			if (this.thumbs) {
				var a = $$('strong', this.p);
				
				if(a.length==0){
					var a = $$('img', this.p);
				}
				
				for (var x = 0, l = a.length; x < l; x++) {
					if(x == s){
						jQuery(a[x]).addClass("active");	
					}else{
						jQuery(a[x]).removeClass("active");
					}
				}
			}
		},
		showImage : function(s, clear) {
			var ref = this;
			this.f.appendChild(this.i);
			var w = this.o - parseInt(this.i.width);
			if (w > 0) {
				var l = Math.floor(w / 2);
				//this.i.style.borderLeft = l + 'px solid ' + this.letterbox;
				//this.i.style.borderRight = (w - l) + 'px solid ' + this.letterbox;
			}
			TINY.alpha.set(this.i, 100, this.imgSpeed);

			this.showInfoTout = setTimeout(function(){
				ref.showInfo(s);
			}, this.imgSpeed * 100); // dopo mezzo secodo mostra le info
			
			if (!clear) {
				this.at = setTimeout(function (){
					ref.mv(1,1);
				}, this.speed * 1000);
			}
			if (this.a[s].l != '') {
				this.q.onclick = new Function('window.location="' + this.a[s].l + '"');
				this.q.onmouseover = new Function('this.className="' + this.link + '"');
				this.q.onmouseout = new Function('this.className=""');
				this.q.style.cursor = 'pointer';
			} else {
				this.q.onclick = this.q.onmouseover = null;
				this.q.style.cursor = 'default';
			}
			var m = $$('img', this.f);
			if (m.length > 2) {
				this.f.removeChild(m[0]);
			}
		},
		showInfo : function(s) {
			if (this.info) {
				s = this.a[s];
				$$('h3', this.r)[0].innerHTML = s.t;
				$$('p', this.r)[0].innerHTML = s.d;
				this.r.style.height = 'auto';
				var h = parseInt(this.r.offsetHeight);
				this.r.style.height = 0;
				TINY.height.set(this.r, h, this.infoSpeed, 0);
			}
		}
	};

	TINY.scroll = function() {
		return {
			init : function(e, d, s) {
				e = typeof e == 'object' ? e : $(e);
				var p = e.style.left || TINY.style.val(e, 'left');
				e.style.left = p;
				var l = d == 1 ? parseInt(e.offsetWidth) - parseInt(e.parentNode.offsetWidth) : 0;
				e.si = setInterval(function() {
					TINY.scroll.mv(e, l, d, s)
				}, 20)
			},
			mv : function(e, l, d, s) {
				var c = parseInt(e.style.left);
				if (c == l) {
					TINY.scroll.cl(e)
				} else {
					var i = Math.abs(l + c);
					i = i < s ? i : s;
					var n = c - i * d;
					e.style.left = n + 'px'
				}
			},
			cl : function(e) {
				e = typeof e == 'object' ? e : $(e);
				clearInterval(e.si)
			}
		}
	}();

	TINY.height = function() {
		return {
			set : function(e, h, s, d) {
				e = typeof e == 'object' ? e : $(e);
				var oh = e.offsetHeight, ho = e.style.height || TINY.style.val(e, 'height');
				ho = oh - parseInt(ho);
				var hd = oh - ho > h ? -1 : 1;
				clearInterval(e.si);
				e.si = setInterval(function() {
					TINY.height.tw(e, h, ho, hd, s);
				}, 20)
			},
			tw : function(e, h, ho, hd, s) {
				var oh = e.offsetHeight - ho;
				if (oh == h) {
					clearInterval(e.si)
				} else {
					if (oh != h) {
						e.style.height = oh + (Math.ceil(Math.abs(h - oh) / s) * hd) + 'px';
					}
				}
			}
		}
	}();
	
	TINY.alpha = function() {
		return {
			set : function(e, a, s) {
				e = typeof e == 'object' ? e : $(e);
				var o = e.style.opacity || TINY.style.val(e, 'opacity'), d = a > o * 100 ? 1 : -1;
				e.style.opacity = o;
				clearInterval(e.ai);
				e.ai = setInterval(function() {
					TINY.alpha.tw(e, a, d, s)
				}, 20)
			},
			tw : function(e, a, d, s) {
				var o = Math.round(e.style.opacity * 100);
				if (o == a) {
					clearInterval(e.ai)
				} else {
					var n = o + Math.ceil(Math.abs(a - o) / s) * d;
					e.style.opacity = n / 100;
					e.style.filter = 'alpha(opacity=' + n + ')'
				}
			}
		}
	}();

	TINY.style = function() {
		return {
			val : function(e, p) {
				e = typeof e == 'object' ? e : $(e);
				return e.currentStyle ? e.currentStyle[p] : document.defaultView.getComputedStyle(e, null).getPropertyValue(p)
			}
		}
	}();
	window.TinyGallery=TINY;
})();

