var toppage = function(){
	var that = {};
	var tweets = {
		"viewtweetsnum":54, //please this number must be set even.
		"slidespeed":1.0
	};

	var init = function(){
		var eleSPsitecontainer = document.getElementById("spcitecontainer");
		var eleSPsites = eleSPsitecontainer.getElementsByTagName("img");
		var eleTopicContainer = document.getElementById("topiccontainer");
		var eleWhatnewContainer = document.getElementById("wnewcontainer");
		var eleTopics = getElementsByClassname("topic",eleTopicContainer,"div");
		var eleWhatnews = getElementsByClassname("wnew",eleWhatnewContainer,"a");
		
		for(var i=0;i<eleTopics.length;i++){
			var eleTopic = eleTopics[i];
			var eleClear = createElementEx("div",{"className":"clear"});
			eleTopic.onmouseover = (function(eleTopic){
				return function(){
					eleTopic.style.backgroundColor = "#ffddbb";
				};
			})(eleTopic);
			eleTopic.onmouseout = (function(eleTopic){
				return function(){
					eleTopic.style.backgroundColor = "";
				};
			})(eleTopic);
			eleTopic.appendChild(eleClear);
		}
		for(var i=0;i<eleWhatnews.length;i++){
			var eleWhatnew = eleWhatnews[i];
			var eleDate = eleWhatnews[i].getElementsByTagName("dt")[0];
			var eleNote = eleWhatnews[i].getElementsByTagName("dd")[0];
			eleWhatnew.onmouseover = (function(eleDate,eleNote){
				return function(){
					eleDate.style.backgroundColor = "#ffddbb";
					eleNote.style.backgroundColor = "#ffddbb";
				};
			})(eleDate,eleNote);

			eleWhatnew.onmouseout = (function(eleDate,eleNote){
				return function(){
					eleDate.style.backgroundColor = "";
					eleNote.style.backgroundColor = "";
				};
			})(eleDate,eleNote);
			
		}
		for(var i=0;i<eleSPsites.length;i++){
			eleSPsites[i].onmouseover = function(){
				this.src = this.src.replace(".jpg","")+"_on.jpg";
			};
			eleSPsites[i].onmouseout = function(){
				this.src = this.src.replace("_on.jpg","")+".jpg";
			};
		}
		loadTweets();
	};

	var initTweets = function(){
		if(tweets.loaded){

		var eleTweetsList = createElementEx("ul",{"id":"tweet_list"});
		document.getElementById("tweetscontainer_frame").appendChild(eleTweetsList);
		var eleTweetsContainer = document.getElementById("tweetscontainer");
		var eleTweets = [];

		var eleTweetDetailWin       = createElementEx("div",{"id":"tweet_detail_win"});
		var eleTweetDetailWinTitle  = createElementEx("div",{"className":"tweet_detail_win_title"});

		var eleTweetDetailWinDetailCont = createElementEx("div",{"className":"tweet_detail_win_detailcont"});
		var eleTweetDetailWinDetailCap = createElementEx("div",{"className":"tweet_detail_win_detailcap","text":"コメント"});
		var eleTweetDetailWinDetail = createElementEx("div",{"className":"tweet_detail_win_detail"});
		var eleTweetDetailWinDate   = createElementEx("div",{"className":"tweet_detail_win_date"});

		var eleTweetDetailWinPicCont= createElementEx("div",{"className":"tweet_detail_win_piccont"});
		var eleTweetDetailWinPic    = createElementEx("img",{"className":"tweet_detail_win_pic"});
		var eleTweetDetailWinOtherPics = createElementEx("div",{"className":"tweet_detail_win_other_pics"});

		eleTweetDetailWinPicCont.appendChild(eleTweetDetailWinPic);
		eleTweetDetailWin.appendChild(eleTweetDetailWinTitle);
		eleTweetDetailWin.appendChild(eleTweetDetailWinPicCont);
		eleTweetDetailWinDetailCont.appendChild(eleTweetDetailWinDetailCap);
		eleTweetDetailWinDetailCont.appendChild(eleTweetDetailWinDetail);
		eleTweetDetailWinDetailCont.appendChild(eleTweetDetailWinDate);
		eleTweetDetailWin.appendChild(eleTweetDetailWinDetailCont);
		eleTweetDetailWin.appendChild(eleTweetDetailWinOtherPics);

		var eleOverlay = document.getElementById("overlay");
		var eleOverlayBack = document.getElementById("overlay_back");

		eleOverlayBack.onclick = function(){
			eleOverlay.style.display = "none";
		}
		eleOverlay.appendChild(eleTweetDetailWin);

		var eleTweetListItem = createElementEx("div",{"className":"tweet_list_item_caption", "text":"News 一覧"});
		eleTweetsList.appendChild(eleTweetListItem);
		//////////////////////////////////////
		var viewTweetsNum = (tweets.items.length > tweets.viewtweetsnum)? tweets.viewtweetsnum : tweets.items.length;
		///////////////////////////////////////
		//ランダムに出現
		//////////////////////////////////////
		for(var i=0;i<viewTweetsNum;i++){
			var now = new Date();
			var nocache = now.toUTCString();
			var eleTweetListItem;
			if(tweets.items[i].getElementsByTagName("new")[0].firstChild.nodeValue === "1"){
				var test =tweets.items[i].getElementsByTagName("new")[0].firstChild.nodeValue;
				eleTweetListItem = createElementEx("li",{"className":"tweet_list_item new", "text":tweets.items[i].getElementsByTagName("caption")[0].firstChild.nodeValue + " New!! "});
			}else {
				eleTweetListItem = createElementEx("li",{"className":"tweet_list_item", "text":tweets.items[i].getElementsByTagName("caption")[0].firstChild.nodeValue});
			}
			var eleTweet = createElementEx("div",{"className":"tweet"}, [
				{"eleName":"div", "attrObj":{"className":"thumb"},"childs":
					[{"eleName":"img", "attrObj":{"src":tweets.items[i].getElementsByTagName("thumb")[0].firstChild.nodeValue + "?" + nocache}}]},
				{"eleName":"div", "attrObj":{"className":"date","text": (tweets.items[i].getElementsByTagName("date")[0].firstChild)?tweets.items[i].getElementsByTagName("date")[0].firstChild.nodeValue:" "}},
				{"eleName":"div", "attrObj":{"className":"caption","text": tweets.items[i].getElementsByTagName("caption")[0].firstChild.nodeValue}}
				]);
			eleTweet.style.left = (i*310) + "px";
			eleTweetListItem.onmouseover = (function(eleTweetListItem){
				return function(){
					eleTweetListItem.style.backgroundColor = "#ffddbb";
				};
			})(eleTweetListItem);
			eleTweet.onmouseover = (function(eleTweet){
				return function(){
					eleTweet.style.backgroundColor = "#ffddbb";
				};
			})(eleTweet);
			eleTweetListItem.onmouseout = (function(eleTweetListItem){
				return function(){
					eleTweetListItem.style.backgroundColor = "#ffffff";
				};
			})(eleTweetListItem);
			eleTweet.onmouseout = (function(eleTweet){
				return function(){
					eleTweet.style.backgroundColor = "#ffffff";
				};
			})(eleTweet);

			eleTweet.onclick = (function(i){
				return function(){
					eleTweetDetailWinOtherPics.innerHTML = "";
					var picNum = (tweets.items[i].getElementsByTagName("pic").length > 5)? 5 :tweets.items[i].getElementsByTagName("pic").length;
					for(var j=0;j<picNum;j++){
						var eleOtherPic = createElementEx("div",{"className":"tweet_detail_win_other_pic"});
						var eleOtherPicImg = createElementEx("img",{"src":tweets.items[i].getElementsByTagName("pic")[j].firstChild.nodeValue + "?" + nocache});
						eleOtherPic.appendChild(eleOtherPicImg);
						eleTweetDetailWinOtherPics.appendChild(eleOtherPic);
						eleOtherPic.onclick = (function(j){return function(){
							eleTweetDetailWinPic.src = tweets.items[i].getElementsByTagName("pic")[j].firstChild.nodeValue;
						};})(j);
					}
					eleOverlayBack.style.width = (!document.all)? (parseInt(window.innerWidth))+"px": (parseInt(document.body.clientWidth)) + "px";
					eleOverlayBack.style.height = (!document.all)? (parseInt(window.innerHeight))+"px": (parseInt(document.body.clientHeight)) + "px";
					eleTweetDetailWin.style.left = (!document.all)? ((parseInt(window.innerWidth)/2)-(640/2))+"px" : ((parseInt(document.body.clientWidth)/2)-(640/2))+"px";
					eleTweetDetailWin.style.top = (!document.all)? ((parseInt(window.innerHeight)/2)-(380/2))+"px" : ((parseInt(document.body.clientHeight)/2)-(380/2))+"px";
					eleTweetDetailWin.style.height = "0px";
					eleOverlay.style.display = "block";
					eleTweetDetailWinTitle.innerHTML = tweets.items[i].getElementsByTagName("caption")[0].firstChild.nodeValue;
					eleTweetDetailWinDetail.innerHTML = tweets.items[i].getElementsByTagName("comment")[0].firstChild.nodeValue;
					eleTweetDetailWinDate.innerHTML = (tweets.items[i].getElementsByTagName("date")[0].firstChild)?tweets.items[i].getElementsByTagName("date")[0].firstChild.nodeValue:" ";
					eleTweetDetailWinPic.src = tweets.items[i].getElementsByTagName("pic")[0].firstChild.nodeValue;
					var acceration = 1;
					var easeIn = function(){
						eleTweetDetailWinDetailCont.style.overflowY = "hidden";
						if(parseInt(eleTweetDetailWin.style.height) < 200){
							acceration *= 1.1;
						}else{
							acceration /= 1.1;
						}
						var nextHeight = parseInt(eleTweetDetailWin.style.height)+acceration;
						eleTweetDetailWin.style.top = (!document.all)? ((parseInt(window.innerHeight)/2)-(nextHeight/2))+"px" : ((parseInt(document.body.clientHeight)/2)-(nextHeight/2))+"px";
						eleTweetDetailWin.style.height = nextHeight+"px";
						if(nextHeight < 380){
							setTimeout(easeIn,5);
						}else{
							eleTweetDetailWin.style.height = "380px";
							eleTweetDetailWinDetailCont.style.overflowY = "scroll";
						}
					};
					setTimeout(easeIn,100);
				};
			})(i);
			eleTweetListItem.onclick = eleTweet.onclick;
			eleTweetsList.appendChild(eleTweetListItem);
			eleTweetsContainer.appendChild(eleTweet);
			eleTweets.push(eleTweet);
		}
		eleTweetsContainer.onload = (function(eleTweets){
			/*
			for(var i=0;i<eleTweets.length;i++){
				slideTweets(eleTweets[(i+(eleTweets.length-1))%eleTweets.length],eleTweets[i],eleTweets[(i+1)%eleTweets.length] );
			}
			*/
			slideTweets(eleTweets);
		})(eleTweets);
		document.getElementById("tweetlist").onclick = function(){
			if(eleTweetsList.style.display != "block"){
				eleTweetsList.style.display = "block";
			}
			else {
				eleTweetsList.style.display = "none";
			}
		};
		
		/*
		eleTweetsContainer.onmousemove = (function(eleTweets,event){
			return function(event){
				var centerposi = parseInt(document.body.clientWidth)/2;
				if(!document.all){
					if(parseInt(event.pageX) < centerposi){ tweets.slidedirect = "l"; }
					else { tweets.slidedirect = "r"; }
					tweets.slidespeed = Math.abs(parseInt(event.pageX)-centerposi)/100;
				}
			};
		})(eleTweets);
		*/

		}
	};

	var slideTweets = function(eleTweets){
		var lcue = [];
		var rcue = [];
		var acue = []; // length == 4
		var container_width = 939;
		var slide = container_width/3;
		var rmax = container_width;
		var lmax = -slide;
		var rotate = "l";
		var interval = 20;

		var eles = eleTweets;
		var aidx = (eles.length-4)/2;
		var ridx = aidx+4;
		var lidx = aidx-1;
		for(var i=0;i<4;i++){
			eles[i+aidx].style.left = (i*slide) + "px";
			acue.push(eles[i+aidx]);
		}
		for(var j=ridx;j<eles.length;j++){
			eles[j].style.left = rmax + "px";
			rcue.push(eles[j]);
		}
		for(var k=lidx;k>=0;k--){
			eles[k].style.left = lmax + "px";
			lcue.push(eles[k]);
		}
		var slideToRight = function(){
			if(rotate === "r"){
				var rof = parseInt(acue[acue.length-1].style.left);
				if(rof > rmax){
					var a2r = acue.pop();
					var r2l = rcue.pop();
					r2l.style.left = lmax + "px";
					var l2a = lcue.shift();
					rcue.unshift(a2r);
					lcue.push(r2l);
					acue.unshift(l2a);
				}
				for(var i=0;i<acue.length;i++){
					acue[i].style.left = (parseInt(acue[i].style.left)+1) + "px";
				}
				setTimeout(slideToRight, interval);
			}
		};
		var slideToLeft = function(){
			if(rotate === "l"){
				var rof = parseInt(acue[0].style.left);
				if(rof < lmax){
					var a2l = acue.shift();
					var l2r = lcue.pop();
					l2r.style.left = rmax + "px";
					var r2a = rcue.shift();
					rcue.push(l2r);
					lcue.unshift(a2l);
					acue.push(r2a);
				}
				for(var i=0;i<acue.length;i++){
					acue[i].style.left = (parseInt(acue[i].style.left)-1) + "px";
				}
				setTimeout(slideToLeft, interval);
			}
		};
		setTimeout(slideToLeft, interval);
	};
	var slideTweetsOld = function(leftEle,eleTweet,rightEle){
		var slideTweetsTimer;
		var interval = 20;
		var max = 950+1550;
		var min = -310-1550;

		var slideToRight = function(){
			if(tweets.slidedirect === "r"){
				if(parseInt(eleTweet.style.left) > max ){ eleTweet.style.left = min+"px"; }
				if(Math.abs(parseInt(rightEle.style.left) - parseInt(eleTweet.style.left)) > 310)
					eleTweet.style.left = (parseInt(eleTweet.style.left)+tweets.slidespeed) + "px";
				setTimeout(slideToRight,interval);
			}else{
				setTimeout(slideToLeft,interval);
			}
		};

		var slideToLeft  = function(){
			if(tweets.slidedirect === "l"){
				if(parseInt(eleTweet.style.left) < min ){ eleTweet.style.left = max+"px"; }
				if(Math.abs(parseInt(leftEle.style.left) - parseInt(eleTweet.style.left)) > 310)
					eleTweet.style.left = (parseInt(eleTweet.style.left)-tweets.slidespeed) + "px";
				setTimeout(slideToLeft,interval);
			}else{
				setTimeout(slideToRight,interval);
			}
		};

		setTimeout(slideToRight,interval);

	};

	var loadTweets = function(){
		var filename = "xml/top/tweet.xml";
		var xhr = createHttpRequest();
		var now = new Date();
		var nocache = now.toUTCString();
		xhr.open("get",filename+"?nocache="+nocache);
		xhr.onreadystatechange = function(){
			if (xhr.readyState==4){
				tweets.items = xhr.responseXML.getElementsByTagName("tweet");
				tweets.loaded = 1;
				initTweets();
			}
		};
		xhr.send();
	};
	var createHttpRequest = function(){
		if(window.ActiveXObject){
			try {
				return new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					return new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e2) {
						return null;
				}
			}
		} else if(window.XMLHttpRequest){
			return new XMLHttpRequest();
		} else {
			return null;
		}
	};
	var createElementEx = function (eleName,attrObj,childs){
		var ele = document.createElement(eleName);
		if(attrObj.hasOwnProperty("className")){ele.className = attrObj["className"];}
		if(attrObj.hasOwnProperty("id")){ele.id = attrObj["id"];}
		if(attrObj.hasOwnProperty("text")){ele.innerHTML = attrObj["text"];}
		if(eleName==="img"&&attrObj.hasOwnProperty("src")){ele.src = attrObj["src"];}
		if(childs){
			for(var i=0;i<childs.length;i++){
				var childele = (childs[i].hasOwnProperty("childs"))?
					createElementEx(childs[i].eleName,childs[i].attrObj,childs[i].childs) : 
					createElementEx(childs[i].eleName,childs[i].attrObj);

				ele.appendChild(childele);
			}
		}
		return ele;
	};
	var getElementsByClassname = function(className,ele,tagName){
		var eleArray = [];
		var eles = ele.getElementsByTagName(tagName);
		for(var i=0;i<eles.length;i++){
			if(eles[i].className === className){
				eleArray.push(eles[i]);
			}
		}
		return eleArray;
	};
	that.init = init;
	return that;
};
var toppageview = toppage();
window.onload = (function(){
	return function(){
		menuview.linkItems();
		toppageview.init();
	};
})();

