var NicoMylist = new function(){
	//publicメソッド
	this.getIndex = function(){
		if(document.getElementById("nicoMylistRoot").childNodes.length <= 2){
			var _container = document.getElementById("nicoMylistRoot");
			var container = _container.appendChild(document.createElement("p"));
			container.setAttribute("id","rootProgress");
			container.innerHTML = "ロード中…";
			var icon = document.getElementById("folder_root");
			icon.src = "/common/img/icon_folder_o.gif";
			createXMLHttp(mylistIndexXML);
		}else{
			var lists = document.getElementById("mylistAll");
			var icon = document.getElementById("folder_root");
			if(lists.style.display == "block"){
				lists.style.display = "none";
				icon.src = "/common/img/icon_folder_c.gif";
			}else{
				lists.style.display = "block";
				icon.src = "/common/img/icon_folder_o.gif";
			}
		}
	}
	
	this.getMylist = function(mylistId){
		if(document.getElementById("nicoMylistId_"+mylistId).childNodes.length <= 2){
			var _container = document.getElementById("nicoMylistId_"+mylistId);
			var container = _container.appendChild(document.createElement("p"));
			container.setAttribute("id",mylistId+"Progress");
			container.innerHTML = "ロード中…";
			var icon = document.getElementById("folder_"+mylistId);
			icon.src = "/common/img/icon_folder_o.gif";
			createXMLHttp("http://blog.ks-product.com/crossdomain-proxy.php?url=http://www.nicovideo.jp/mylist/"+mylistId+"?rss=2.0");
		}else if(document.getElementById("mylist"+mylistId)){
			var mylist = document.getElementById("mylist"+mylistId);
			var icon = document.getElementById("folder_"+mylistId);
			if(mylist.style.display == "block"){
				mylist.style.display = "none";
				icon.src = "/common/img/icon_folder_c.gif";
			}else{
				mylist.style.display = "block";
				icon.src = "/common/img/icon_folder_o.gif";
			}
		}
	}
	
	this.showVideoDetail = function(uniqueId){
		clearInterval(timer);
		
		if(videoInfoArray[uniqueId]){
			var e;
			if(!(e = document.getElementById("nicoMylistPopup"))){
				e = document.createElement("div");
				e.setAttribute("id","nicoMylistPopup");
				e.style.left = "-730px";
				e.style.top = "-100px";
			}
			
			var __desc = document.createElement("div");
			__desc.innerHTML = videoInfoArray[uniqueId]["description"];
			var memo;
			var thumb;
			var desc;
			var info;
			for(var i=0; i < __desc.getElementsByTagName("p").length; i++){
				var tmp = __desc.getElementsByTagName("p")[i];
				var className = tmp.getAttribute("class");
				if(!className) className = tmp.getAttribute("className");

				switch(className){
					case "nico-memo":
						memo = tmp;
					break;
					case "nico-thumbnail":
						thumb = tmp;
					break;
					case "nico-description":
						desc = tmp;
					break;
					case "nico-info":
						info = tmp;
					break;
					default:
					break;
				}
			}
			if(memo) memo.innerHTML = "<span class'title'>一言メモ： </span>"+memo.innerHTML;
			var img = thumb.firstChild;
			img.width = 130;
			img.height = 100;
			
			e.innerHTML = "<p class=\"videoTitle\">"+videoInfoArray[uniqueId]["title"]+"</p><div class=\"nico-desc-wrapper\"></div>";
			var wrapper = e.getElementsByTagName("div")[0];
			wrapper.appendChild(thumb);
			wrapper.appendChild(desc);
			desc.appendChild(info)
			e.appendChild(wrapper);
			if(memo) e.appendChild(memo);
			
			var container = document.getElementById("nicoVideoId_"+uniqueId);
			container.appendChild(e);
			container.style.position = "relative";
			document.getElementById("nicoMylistPopup").style.display = "block";
		}
	}
	
	this.hiddenVideoDetal = function(){
		timer = setInterval(function(){
			document.getElementById("nicoMylistPopup").style.display = "none";
			clearInterval(timer);
		},500);
	}

	//privateメソッド
	function createXMLHttp(url){
		var xmlHttp;
		
		try {
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
				xmlHttp=new XMLHttpRequest();
		}
		
		xmlHttp.onreadystatechange = function() {
		　　　　if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
		　　　　　onComplete(xmlHttp,url);
		　　　　}else if(xmlHttp.readyState == 4 && (xmlHttp.status != 200 || xmlHttp.responseXML == null)){
							createXMLHttp(url);
						}
		　　};
		xmlHttp.open("GET",url,true); 
		xmlHttp.send(null);
	}
	
	function onComplete(xmlHttp,url){
		if(url == mylistIndexXML){
			var _container = document.getElementById("nicoMylistRoot");
			var count = xmlHttp.responseXML.getElementsByTagName("item").length;
			var html = "";
			var container = _container.appendChild(document.createElement("ul"));
			container.setAttribute("id","mylistAll");
			container.style.display = "block";
			_container.removeChild(document.getElementById("rootProgress"));
			
			for(var i = 0; i < count; i++){
				var mylistId = xmlHttp.responseXML.getElementsByTagName("item")[i].getAttribute("href");
				var title = xmlHttp.responseXML.getElementsByTagName("item")[i].getAttribute("title");
				html += '<li id="nicoMylistId_'+mylistId+'"><a href="http://www.nicovideo.jp/mylist/'+mylistId+'" onclick="NicoMylist.getMylist('+mylistId+'); return false;"><img id="folder_'+mylistId+'" src="/common/img/icon_folder_c.gif" alt="" width="16" height="14" style="vertical-align:middle; margin-right:5px;" /></a><a href="http://www.nicovideo.jp/mylist/'+mylistId+'" onclick="NicoMylist.getMylist('+mylistId+'); return false;">'+title+'</a></li>';
			}
			container.innerHTML = html;
		}else{
			var count = xmlHttp.responseXML.getElementsByTagName("item").length;
			var html = "";
			var mylistIdFull = xmlHttp.responseXML.getElementsByTagName("link")[0].firstChild.nodeValue;
			var mylistId = mylistIdFull.slice(mylistIdFull.lastIndexOf("/")+1);
			var _container = document.getElementById("nicoMylistId_"+mylistId);
			var container = _container.appendChild(document.createElement("ul"));
			container.setAttribute("id","mylist"+mylistId);
			container.style.display = "block";
			container.style.marginBottom = "15px";
			_container.removeChild(document.getElementById(mylistId+"Progress"));
			
			for(var i = 0; i < count; i++){
				var item = xmlHttp.responseXML.getElementsByTagName("item")[i];
				var title = item.getElementsByTagName("title")[0].firstChild.nodeValue;
				var link = item.getElementsByTagName("link")[0].firstChild.nodeValue;
				var videoId = link.slice(link.lastIndexOf("/")+1);
				if(!isNaN(videoId)) continue; //コミュニティ限定動画は除外 
				var uniqueId = videoId+"_"+mylistId;
				var description = item.getElementsByTagName("description")[0].firstChild.nodeValue;
				videoInfoArray[uniqueId]= {title:title,link:link,videoId:videoId,description:description};
				html += '<li id="nicoVideoId_'+uniqueId+'" class="videoItem"><a href="#" onclick="openNicoVideoWindow(\''+videoId+'\'); return false;" onmouseover="NicoMylist.showVideoDetail(\''+uniqueId+'\'); over(this);" onmouseout="NicoMylist.hiddenVideoDetal(); out(this);"><span>'+videoId+'</span><img class="openNewWindowIcon" src="/common/img/icon_new_window.gif" alt="" width="10" height="9" /></a><span style="color:#999999;">（<a href="http://www.nicovideo.jp/watch/'+videoId+'" target="_blank" onmouseover="NicoMylist.showVideoDetail(\''+uniqueId+'\'); over(this);" onmouseout="NicoMylist.hiddenVideoDetal(); out(this);"><span>on Nicovideo</span><img class="openNewWindowIcon" src="/common/img/icon_new_window.gif" alt="" width="10" height="9" /></a>）</span></li>';
			}
			container.innerHTML = html;
		}
	}
	
	function drawBaseHTML(){
		document.write(
				 '<div class="nicoMylist">'
				+'	<dl>'
				+'		<dt class="naviHeading"><img src="/common/img/txt_h_nicomylist.gif" alt="nicovideo mylist" width="121" height="13" /></dt>'
				+'		<dd>'
				+'			<ul id="nicoMylistContainer" class="folder"><li id="nicoMylistRoot"><a href="#" onclick="NicoMylist.getIndex(); return false;"><img id="folder_root" src="/common/img/icon_folder_c.gif" alt="" width="16" height="14" style="vertical-align:middle; margin-right:5px;" /></a><a href="#" onclick="NicoMylist.getIndex(); return false;">ニコニコ動画マイリスト</a></li></ul>'
				+'		</dd>'
				+'	</dl>'
				+'</div>');
	}
	
	//エントリーポイント
	var videoInfoArray = new Array();
	var timer;
	var mylistIndexXML = "/common/xml/nico2mylist.xml";
	
	drawBaseHTML();
	//createXMLHttp(mylistIndexXML);
}
