var TINY={};

function $_Slideshow(i) {
	return document.getElementById(i)
}

function $$_Slideshow(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            = []
};

/*
	function initSlideShow(){
		slideshow.auto=false;
		slideshow.speed=5;
		slideshow.link="linkhover";
		slideshow.info="information";
		slideshow.thumbs="slider";
		slideshow.left="slideleft";
		slideshow.right="slideright";
		slideshow.scrollSpeed=4;
		slideshow.spacing=5;
		slideshow.active="#fff";
		slideshow.init("slideshow","image","imgprev","imgnext","imglink");
	}

*/

TINY.slideshow.prototype={
	init:function(s,z,b,f,q){
		s = $_Slideshow(s);

		var  m = $$_Slideshow('li',s), i=0, w=0;
		this.l = m.length;
		this.q = $_Slideshow(q);
		this.f = $_Slideshow(z);
		this.r = $_Slideshow(this.info);
		this.o = parseInt(TINY.style.val(z,'width'));

		// Thumbnail領域が指定されていれば、スクロールバーにイベントを追加する
		if(this.thumbs){
			var u = $_Slideshow(this.left);
			var r = $_Slideshow(this.right);

			u.onmouseover = new Function('TINY.scroll.init("'+this.thumbs+'",-1,'+this.scrollSpeed+')');
			u.onmouseout  = r.onmouseout=new Function('TINY.scroll.cl("'+this.thumbs+'")');
			r.onmouseover = new Function('TINY.scroll.init("'+this.thumbs+'",1,'+this.scrollSpeed+')');

			this.p = $_Slideshow(this.thumbs)
		}

		// すべての画像に対して処理を行う
		for(i; i < this.l; i++){
			this.a[i]  = {};
			var h      = m[i];
			var a      = this.a[i];

			a.t = $$_Slideshow('h3',h)[0].innerHTML;
			a.d = $$_Slideshow('p',h)[0].innerHTML;
			a.l = $$_Slideshow('a',h)[0]? $$_Slideshow('a',h)[0].href: '';
			a.p = $$_Slideshow('span',h)[0].innerHTML;

			var href = $$_Slideshow('a',h)[0]? $$_Slideshow('a',h)[0].href: '';

			if(this.thumbs){
				var g = $$_Slideshow('img',h)[0];

				// thumbにimgタグを追加
				this.p.appendChild(g);

				// 最後の画像でなければ、右にスペースをとる
				w += parseInt(g.offsetWidth);
				if(i != this.l - 1){
					g.style.marginRight=this.spacing+'px';
					w+=this.spacing
				}

				// Thumbnail領域の横幅を決定
				this.p.style.width = w + 'px';

				// 画像に透過処理を追加する
				g.style.opacity    = this.thumbOpacity/100;
				g.style.filter     = 'alpha(opacity='+this.thumbOpacity+')';
				g.onmouseover      = new Function('TINY.alpha.set(this,100,5)');
				g.onmouseout       = new Function('TINY.alpha.set(this,'+this.thumbOpacity+',5)');

				// サムネイルをクリックした場合の動作を設定
				//	g.onclick=new Function(this.n+'.pr('+i+',1)')
				// もしリンク先が指定されていれば、クリック時に開くよう修正
				if(href) {
					// ターゲットが存在しているか否かを指定
/*
					g.onclick = function() {
						window.open("" + href, "photo", " width=600");
					};
*/
				}
			}
		}

		// スライドショーのナビゲーションにイベントと透過処理を追加
		if(b && f) {
			b = $_Slideshow(b);
			f = $_Slideshow(f);

			b.style.opacity  = f.style.opacity = this.navOpacity/100;
			b.style.filter   = f.style.filter  = 'alpha(opacity='+this.navOpacity+')';
			b.onmouseover    = f.onmouseover   = new Function('TINY.alpha.set(this,'+this.navHover+',5)');
			b.onmouseout     = f.onmouseout    = new Function('TINY.alpha.set(this,'+this.navOpacity+',5)');
			b.onclick        = new Function(this.n+'.mv(-1,1)');
			f.onclick        = new Function(this.n+'.mv(1,1)')
		}

		this.auto? this.is(0,0): this.is(0,1)
	},

	mv:function(d,c){
		var t  = this.c+d;
		this.c = t = t < 0?this.l-1: t>this.l-1? 0 : t;
		this.pr(t,c)
	},

	pr:function(t,c){
		clearTimeout(this.lt);
		if(c){
			clearTimeout(this.at)
		}
		this.c = t;
		this.is(t,c)
	},

	is:function(s,c){
		if(this.info){
			TINY.height.set(this.r, 1, this.infoSpeed / 2, -1)
		}

		var i           =  new Image();
		i.style.opacity = 0;
		i.style.filter  = 'alpha(opacity=0)';
		this.i          = i;
		i.onload        = new Function(this.n+'.le('+s+','+c+')');
		i.src           = this.a[s].p;

		// サムネイルを表示する場所はここ
		if(this.thumbs){
			var a = $$_Slideshow('img',this.p), l = a.length, x = 0;
			for(x; x < l; x++){
				a[x].style.borderColor = x != s? '': this.active
			}
		}
	},

	le:function(s,c){
		this.f.appendChild(this.i);

		var w = this.o - parseInt(this.i.offsetWidth);

		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);

		var n   = new Function(this.n+'.nf('+s+')');
		this.lt = setTimeout(n,this.imgSpeed*100);

		if(!c){
			this.at = setTimeout(new Function(this.n+'.mv(1,0)'), 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 = $$_Slideshow('img',this.f);

		if(m.length > 2){
			this.f.removeChild(m[0])
		}
	},

	nf:function(s){
		if(this.info){
			s=this.a[s];
			$$_Slideshow('h3',this.r)[0].innerHTML=s.t;
			$$_Slideshow('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:$_Slideshow(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:$_Slideshow(e); clearInterval(e.si)}
	}
}();

TINY.height=function(){
	return{
		set:function(e,h,s,d){
			e=typeof e=='object'?e:$_Slideshow(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:$_Slideshow(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:$_Slideshow(e); return e.currentStyle?e.currentStyle[p]:document.defaultView.getComputedStyle(e,null).getPropertyValue(p)}}}();