//############################//
//## メイン画像コントロール ##//
//############################//
var CtrlMainImage = {
	'option' : {
		'liTags' : new Array(),
		'zIndex' : 300,
		'counter' : 0
	},
	
	'init' : function() {
		var that = this;
		
		var parent = document.getElementById("main").getElementsByTagName("H2")[0];
		
		this.option.liTags = parent.getElementsByTagName("LI");
		
		if(this.option.liTags.length > 1) {
			for(var i = 0, len_i = this.option.liTags.length; i < len_i; i++) {
				if(i != len_i - 1) {
					this.option.liTags[i].style.left = "440px";
					this.option.liTags[i].style.top = "0";
				}
				this.option.liTags[i].moveXID = setTimeout("", 40);
				this.option.liTags[i].moveYID = setTimeout("", 40);
				this.option.liTags[i].angle = 0;
			}
			
			setTimeout(function() {
				that.set();
			}, 3000);
		}
	},
	
	'set' : function() {
		if(this.option.counter > this.option.liTags.length - 1) {
			this.option.counter = 0;
		}
		
		for(var i = 0, len_i = this.option.liTags.length; i < len_i; i++) {
			if(i == this.option.counter) {
				this.option.liTags[i].style.zIndex = this.option.zIndex++;
			}
		}
		
		switch(Math.floor(4 * Math.random())) {
			case 0 :
				this.option.liTags[this.option.counter].style.left = "440px";
				this.option.liTags[this.option.counter].style.top = 0;
				this.option.liTags[this.option.counter].moveXID = this.moveX(this.option.liTags[this.option.counter], 0);
				break;
			case 1 :
				this.option.liTags[this.option.counter].style.left = "-440px";
				this.option.liTags[this.option.counter].style.top = 0;
				this.option.liTags[this.option.counter].moveXID = this.moveX(this.option.liTags[this.option.counter], 0);
				break;
			case 2 :
				this.option.liTags[this.option.counter].style.left = 0;
				this.option.liTags[this.option.counter].style.top = "325px";
				this.option.liTags[this.option.counter].moveYID = this.moveY(this.option.liTags[this.option.counter], 0);
				break;
			case 3 :
				this.option.liTags[this.option.counter].style.left = 0;
				this.option.liTags[this.option.counter].style.top = "-325px";
				this.option.liTags[this.option.counter].moveYID = this.moveY(this.option.liTags[this.option.counter], 0);
				break;
			default:
				this.option.liTags[this.option.counter].style.left = "440px";
				this.option.liTags[this.option.counter].style.top = 0;
				this.option.liTags[this.option.counter].moveXID = this.moveX(this.option.liTags[this.option.counter], 0);
		}
	},
	
	'moveX': function(obj, end) {
		var that = this;
		
		var speed = 0;
		var tempPos = parseInt(GET.style(obj, "left"));
		
		if(Math.abs(tempPos - end) > 1) {
			speed = (end - tempPos) * (Math.sin(Math.PI / 180 * obj.angle));
			speed > 0 ? speed = Math.ceil(speed) : speed = Math.floor(speed);
			
			obj.style.left = tempPos + speed + "px";
			
			obj.angle += 2;
			
			return setTimeout(function() {
				obj.moveXID = that.moveX(obj, end);
			}, 40);
		} else {
			obj.style.left = end + "px";
			obj.angle = 0;
			
			clearTimeout(obj.moveXID);
			
			this.option.counter++;
			
			setTimeout(function() {
				that.set();
			}, 3000);
		}
	},
	
	'moveY': function(obj, end) {
		var that = this;
		
		var speed = 0;
		var tempPos = parseInt(GET.style(obj, "top"));
		
		if(Math.abs(tempPos - end) > 1) {
			speed = (end - tempPos) * (Math.sin(Math.PI / 180 * obj.angle));
			speed > 0 ? speed = Math.ceil(speed) : speed = Math.floor(speed);
			
			obj.style.top = tempPos + speed + "px";
			
			obj.angle += 2;
			
			return setTimeout(function() {
				obj.moveYID = that.moveY(obj, end);
			}, 40);
		} else {
			obj.style.top = end + "px";
			obj.angle = 0;
			
			clearTimeout(obj.moveYID);
			
			this.option.counter++;
			
			setTimeout(function() {
				that.set();
			}, 3000);
		}
	}
};

//########################//
//## トピックスチェッカ ##//
//########################//
var TopicsCheker = {
	'init' : function() {
		var that = this;
		
		var parent = document.getElementById("topics");
		var dlTags = parent.getElementsByTagName("DL");
		
		var tempNode;
		for(var i = 0; i < dlTags.length; i++) {
			if(GET.className(dlTags[i])) {
				if(GET.className(dlTags[i]).match(/^del_\d\d\d\d-\d\d-\d\d/)) {
					var parts = GET.className(dlTags[i]).split(" ");
					
					parts[0] = parts[0].replace("del_", "");
					var YMD = parts[0].split("-");
					if(typeof parts[1] != 'undefined') {
						if(parts[1].match(/^\d\d:\d\d:\d\d$/)) {
							var HMS = parts[1].split(":");
							var d = new Date(YMD[0], YMD[1]-1, YMD[2], HMS[0], HMS[1], HMS[2]);
						} else {
							var d = new Date(YMD[0], YMD[1]-1, YMD[2]);
						}
					} else {
						var d = new Date(YMD[0], YMD[1]-1, YMD[2]);
					}
					
					if(serverTime > d.getTime()) {
						dlTags[i].parentNode.removeChild(dlTags[i]);
						i--;
					} else {
						dlTags[i].style.visibility = "visible"
					}
				}
			} else {
				dlTags[i].style.visibility = "visible"
			}
		}
	}
};

//########################//
//## ジャケット取得関数 ##//
//########################//
var GetReleaseItem = {
	'init' : function() {
		var parent =  document.getElementById("release");
		var target = document.getElementById("insertPointRelease");
		var div = document.createElement("div");
		div.setAttribute("id", "wrapper");
		
		
		parent.insertBefore(div, target);
		
		if(window.XMLHttpRequest) {
			var message = new XMLHttpRequest;
			
		} else if(window.ActiveXObject) {
			try {
				var message = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				var message = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			return null;
		}
		
		message.onreadystatechange = function() {
			if(message.readyState == 4) {
				if(message.status == 200) {
					div.innerHTML = message.responseText;
					Scroller.init();
					if(YAHOO.env.ua.webkit == 0 || YAHOO.env.ua.webkit >= 522) Nifty("#release dl", "transparent");
				} else {
					div.innerHTML = '<p class="note">最新リリースタイトル一覧の読み込みに失敗しました。</p>';
				}
				
				if(typeof Popup == "object") Popup.init();
			} else {
				div.innerHTML = '<p class="note">最新リリースタイトル一覧 読み込み中...</p>';
			}
		}
		
		try {
			var d = new Date();
			message.open('GET', "./script/original/get_release_item.php?t=" + d.getTime(), true);
			message.send(null);
		} catch(e) {
			div.innerHTML = '<p class="note">最新リリースタイトル一覧の読み込みに失敗しました。</p>';
		}
	}
};

//##################################//
//## リリースタイトルスクローラー ##//
//##################################//
var Scroller = {
    'init' : function() {
        var parent = document.getElementById("release");
        var dlTags = parent.getElementsByTagName("DL");
        
        for(var i = 0, max = dlTags.length; i < max; i++) {
        	var title = dlTags[i].getElementsByTagName("DT").item(0);
        	var artist = dlTags[i].getElementsByTagName("DD").item(0);
       		
       		this.setFunc(title);
       		this.setFunc(artist);
		}
	},
   	
   	'setFunc' : function(target) {
   		var that = this;
   		
   		target.intervalID = setTimeout("", 40);
   		target.timeoutID = setTimeout("", 20);
   		target.indent = 0;
   		target.style.indent = 0;
   		
		target.onmouseover = function() {
			clearTimeout(target.timeoutID);
			
			var charSize = that.getCharLen(target);
			
			if(charSize > 130) {
				target.intervalID = that.overMove(target, charSize);
			}
		}
		target.onmouseout = function() {
			clearTimeout(this.intervalID);
			
			target.timeoutID = setTimeout(function() {
				target.indent = 0;
				target.style.textIndent = "0";
			}, 20);
		}
   	},
   	
   	'overMove': function(obj, charLen) {
   		var that = this;
   		
   		obj.indent = obj.indent - 3;
		obj.style.textIndent = obj.indent + "px";
		
		if(obj.indent < -charLen - 10) {
			obj.indent = obj.offsetWidth + 5;
		}
		
		return setTimeout(function() {
			obj.intervalID = that.overMove(obj, charLen);
		}, 40);
   	},
   	
   	'getCharLen': function(obj) {
   		var charSize = 0;
   		
   		var span = document.createElement("span");
		var text = document.createTextNode(obj.innerHTML.replace(/<!--.*-->|<\/?[^>]+>/gi, ""));
		span.appendChild(text);
		
		obj.appendChild(span);
		charSize = span.offsetWidth + 20;
		obj.removeChild(span);
		
		return charSize;
   	}
}

//#####################################//
//## リリースタイトル一覧 リンク生成 ##//
//#####################################//
var GetCalendar = {
	'init' : function() {
		
		var parent = document.getElementById("insertPointRelease");
		
		if(window.XMLHttpRequest) {
			var message = new XMLHttpRequest;
			
		} else if(window.ActiveXObject) {
			try {
				var message = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				var message = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			return null;
		}
		
		message.onreadystatechange = function() {
			if(message.readyState == 4) {
				if(message.status == 200) {
					parent.innerHTML = message.responseText;
				} else {
					parent.innerHTML = '<p>リリースタイトル一覧 リンク生成に失敗しました。</p>';
				}
			} else {
				parent.innerHTML = '<p>リリースタイトル一覧 リンク生成中...</p>';
			}
		}
		
		try {
			var d = new Date();
			message.open('GET', "./script/original/get_calendar.php?t=" + d.getTime(), true);
			message.send(null);
		} catch(e) {
			parent.innerHTML = '<p>リリースタイトル一覧 リンク生成に失敗しました。</p>';
		}
	}
};

//####################//
//## イニシャライズ ##//
//####################//
YAHOO.util.Event.onDOMReady(function() {
	TopicsCheker.init();
	CtrlMainImage.init();
	//GetCalendar.init();
	GetReleaseItem.init();
});

