/* --------------------------------
	Slidebox
-------------------------------- */

$(function() {
	slidebox.init();
});


var slidebox = {
	// 設定
	conf: {
		selector: '.slidebox',
		start: 0,
		interval: 6000,
		fadeIn: 400
	},

	// 初期化
	init: function() {
		var self = this;
		var conf = this.conf;
		var slidebox = $(conf.selector).eq(0);
		var start = conf.start;
		var slide = this.slide = slidebox.find('.slide>li').eq(start).addClass('current').end();
		slide.each(function() {
			var elm = $(this);
			var A = elm.find('a').eq(0);
			var href = A.attr('href');
			var target = A.attr('target');
			A.attr('href', 'javascript:void(0);');
			A.attr('target', '_self')
			target = target == "_blank" ? "_blank" : "_self";
			
			elm.click(function() {
				window.open(href , target);
			});
		});
		var temp = [];
		for (var i = 0, l = slide.length; i < l; i++) temp.push('<li><span /></li>');
		var pointer = this.pointer = $(temp.join('')).eq(start).addClass('current').end();
		pointer.each(function(i) {
			$(this).click(function() {
				self.change(i);
			});
		});
		slidebox.append($('<ul class="pointer clearfix" />').append(pointer));
		this.prev = null;
		this.current = start;
		this.next = null;
		this.rotate(start);
	},

	// ローテーション
	rotate: function(order) {
		var self = this;
		if (self.timer) clearTimeout(self.timer);
		this.timer = setTimeout(function() {
			self.forward(order + 1);
		}, this.conf.interval);
	},

	// 変更
	change: function(order) {
		if (this.timer) clearTimeout(this.timer);
		if (order == this.current) {
			if (this.next != null) this.rewind(order);
			else this.rotate(order);
		} else if (this.next != null) {
			this.slide.eq(this.next).removeClass('next').addClass('current');
			this.prev = this.current;
			this.current = this.next;
			this.forward(order);
		} else {
			this.forward(order);
		}
	},

	// 次へ
	forward: function(order) {
		var self = this;
		var callee = arguments.callee;
		var conf = this.conf;
		var slide = this.slide;
		var pointer = this.pointer;
		if (order >= slide.length) order = 0;
		this.next = order;
		var next = slide.eq(order);
		pointer.eq(this.current).removeClass('current');
		pointer.eq(order).addClass('current');
		next.css('opacity', 0).addClass('next').animate({
			opacity: 1
		}, {
			duration: conf.fadeIn,
			easing: 'linear',
			complete: function() {
				if (self.isIE7) next.get(0).style.removeAttribute('filter');
				if (self.prev) {
					slide.eq(self.prev).removeClass('current');
					self.prev = null;
				}
				slide.eq(self.current).removeClass('current');
				next.removeClass('next').addClass('current');
				self.current = order;
				self.next = null;
				self.rotate(order);
			}
		});
	},

	// 前へ
	rewind: function(order) {
		var self = this;
		var conf = this.conf;
		var index = this.next;
		var next = this.slide.eq(index).stop();
		var pointer = this.pointer;
		pointer.eq(index).removeClass('current');
		pointer.eq(order).addClass('current');
		next.animate({
			opacity: 0
		}, {
			duration: Math.floor(conf.fadeIn * next.css('opacity')),
			easing: 'linear',
			complete: function() {
				if (self.isIE7) next.get(0).style.removeAttribute('filter');
				next.removeClass('next');
				self.next = null;
				self.rotate(order);
			}
		});
	},

	// IE7判定フラグ
	isIE7: /msie ([0-9]*)/.test(navigator.userAgent.toLowerCase()) && RegExp.$1 == 7,
	isIE6: /msie ([0-9]*)/.test(navigator.userAgent.toLowerCase()) && RegExp.$1 == 6
}







