﻿/*--------------------------------------------------------------------------*/
/* nicoimg.js : NicoNico thumbnail Images display JavaScript Engine         */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2009/01/06 By Teruyoshi Norikawa (NTTPC Communications.Inc.)  */
/*--------------------------------------------------------------------------*/
// for NicoNico RSS
var	gBaseNicoUrl="http://norikawa.net/Tools/Ajax/Media/Nico/nico2xmljs.php";
var gBaseNicoTypeStr="type=";
var	gBaseNicoTermStr="term=";
var	gBaseNicoGenreStr="genre=";

// for blank thumbnail
var	gBlankThumb="http://norikawa.net/Tools/Ajax/Image/niconico.jpg";
var	gBlankThumbAlt="(´・ω・｀）";
var gBlankURL="http://www.nicovideo.jp/";

// div name (fixed)
var gDispDivName="nicoImgsObj";	// see nicoimgs.php
var gWaitDivName="statusImage";	// see nicoimgs.php

// for internal
var	gCol;
var	gLine;
var	gWidth;
var	gHeight;
var	gSWidth;
var	gSHeight;
var	gPage;
var	gPerPage;

var gType;			// type string
var	gTerm;			// term string
var gGenre;			// genre string
var	gTimer;
var gBaseNicoThumbUrl="http://tn-skr1.smilevideo.jp/smile?i=";

var gDataArray;			// get data array
var gDataArrayCount;	// get data array count

var	ghTim;
/*--------------------------------------------------------------------------*/
/* nicoImgMain : NicoNico thumbnail Images display JavaScript Engine        */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoImgMain(height,width,col,line,type,term,genre,timer,bFirst){
	gDataArray=new Array();
	gDataArrayCount=0;
	gCol=col;
	gLine=line;
	gWidth=width;
	gHeight=height;
	gSWidth=parseInt(width/col);
	gSHeight=parseInt(height/line);
	if(bFirst==1){
		gPage=0;
	}
	gType=type;
	gTerm=term;
	gGenre=genre;
	gPerPage=(gCol*gLine);
	gTimer=timer;
	ghTim=0;
	referToNicoNico(gType,gTerm,gGenre);
}
/*--------------------------------------------------------------------------*/
/* referToNicoNico : inquired to NicoNico                                   */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function referToNicoNico(typeStr,termStr,genreStr){
	if(!typeStr){
		return;
	}
	nicoSetLoadStatus(1);
	var reqParam=nicoCallStringMake(typeStr,termStr,genreStr);
//document.getElementById("debug").innerHTML+=reqParam+"<br />";
	new Ajax.Request(reqParam,{method:'get',onComplete: nicoParseSearchResult});
}
/*--------------------------------------------------------------------------*/
/* nicoCallStringMake : interface cgi call string make                      */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoCallStringMake(typeStr,termStr,genreStr){
	var callStr="";
	var	callStr=gBaseNicoUrl+"?";
	if(typeStr!=""){
		switch(typeStr){
		case 'new':
			callStr+=gBaseNicoTypeStr+typeStr;
			break;
		case 'recent':
			callStr+=gBaseNicoTypeStr+typeStr;
			break;
		case 'viewrank':
		case 'resrank':
		case 'myrank':
			callStr+=gBaseNicoTypeStr+typeStr;
			if(termStr!=""){
				switch(termStr){
				case 'hourly':
				case 'daily':
				case 'weekly':
				case 'monthly':
				case 'total':
					callStr+="&"+gBaseNicoTermStr+termStr;
					break;
				default:
					callStr+="&"+gBaseNicoTermStr+"total";
					break;
				}
			}
			if(genreStr!=""){
				switch(genreStr){
				case 'all':
				case 'music':
				case 'ent':
				case 'anime':
				case 'game':
				case 'animal':
				case 'que':
				case 'radio':
				case 'sport':
				case 'politics':
				case 'chat':
				case 'science':
				case 'history':
				case 'cooking':
				case 'nature':
				case 'diary':
				case 'dance':
				case 'sing':
				case 'play':
				case 'lecture':
				case 'owner':
				case 'tw':
				case 'other':
				case 'test':
				case 'r18':
					callStr+="&"+gBaseNicoGenreStr+genreStr;
					break;
				default:
					callStr+="&"+gBaseNicoGenreStr+"all";
					break;
				}
			}
			break;
		default:
			callStr+=gBaseNicoTypeStr+"new";
			break;
		}
	}else{
		callStr+=gBaseNicoTypeStr+typeStr;
	}
	return callStr;
}
/*--------------------------------------------------------------------------*/
/* nicoParseSearchResult : parse search result callback function            */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoParseSearchResult(obj){
	nicoSetLoadStatus(0);
	if((obj)&&(obj.responseXML)){
		var respObj=obj.responseXML.getElementsByTagName("channel");
		if(respObj){
			var vObj=obj.responseXML.getElementsByTagName("item");
			gDataArrayCount=vObj.length;
			for(var i=0;i<vObj.length;i++){
				nicoDispSearchSuccessResult(vObj.item(i),i);
			}
		}
	}
	if(gDataArrayCount!=0){
		nicoThumbnailDispProc(gPage);
	}
}
/*--------------------------------------------------------------------------*/
/* nicoDispSearchSuccessResult : search result video object display         */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoDispSearchSuccessResult(sObj,i){
// make store data
	var sData=new nicoData();
	if(sObj){
	// title
		var tiObj=sObj.getElementsByTagName("title");
		if((tiObj)&&(tiObj[0].firstChild)){
			sData.title=tiObj[0].firstChild.nodeValue;
		}
	// link
		var linkObj=sObj.getElementsByTagName("link");
		if((linkObj)&&(linkObj[0].firstChild)){
			sData.link=linkObj[0].firstChild.nodeValue;
		// thumbnail
			sData.thumb=nicoThumbnailUrlMake(linkObj[0].firstChild.nodeValue);
		}
	// pubDate
	}
	gDataArray[i]=sData;
}
/*--------------------------------------------------------------------------*/
/* nicoThumbnailUrlMake : NicoNico thumbnail url make                       */
/*  Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*  Updated : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoThumbnailUrlMake(srcUrl){
	var target="";
	if(srcUrl!=""){
		var elem=srcUrl.split("/");
		if(elem.length>1){
			var lastElem=elem[elem.length-1];
			targetElem=lastElem.slice(2);
			target=gBaseNicoThumbUrl+targetElem;
		}
	}
	return target;
}
/*--------------------------------------------------------------------------*/
/* nicoData : NicoNico data structure                                       */
/*  Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*  Updated : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoData(){
	this.title="";
	this.link="";
	this.thumb="";
}
/*--------------------------------------------------------------------------*/
/* nicoThumbnailDispProc : NicoNico thumbnail image display procedure       */
/*  Created : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*  Updated : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoThumbnailDispProc(page){
	var cur;
	var lastFg=false;
	var blockStr="";
	var rstTotal=(gCol*gLine)*page;
	for(var i=rstTotal;i<rstTotal+(gCol*gLine);i++){
		cur=i+1;
		if(i<gDataArrayCount){
			blockStr+=nicoMakeThumbnailHtml(gDataArray[i]);
			if((i!=0)&&(cur%gCol==0)){
				blockStr+="<br clear=\"all\" />";
			}
			if(cur==gDataArrayCount){
				lastFg=true;
			}
		}else{
			blockStr+=nicoMakeBlankThumbnailHtml();
			if((i!=0)&&(cur%gCol==0)){
				blockStr+="<br clear=\"all\" />";
			}
			lastFg=true;
		}
	}
	document.getElementById(gDispDivName).innerHTML=blockStr;
	if(gTimer!=0){
		nicoSetTimer(page,lastFg);
	}
}
/*--------------------------------------------------------------------------*/
/* nicoMakeThumbnailHtml : NicoNico display image thumbnail html make       */
/*  Created : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*  Updated : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoMakeThumbnailHtml(data){
	var str="";
	str+="<a href=\""+data.link+"\" target=\"_blank\">";
	str+="<img src=\""+data.thumb+"\" height=\""+gSHeight+"\" width=\""+gSWidth+"\" alt=\""+data.title+"\" border=\"0\" />";
	str+="</a>";
	return str;
}
/*--------------------------------------------------------------------------*/
/* nicoMakeBlankThumbnailHtml : NicoNico blank thumbnail html make          */
/*  Created : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*  Updated : 2009/01/06 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoMakeBlankThumbnailHtml(){
	var str="";
	str+="<a href=\""+gBlankURL+"\" target=\"_blank\">";
	str+="<img src=\""+gBlankThumb+"\" height=\""+gSHeight+"\" width=\""+gSWidth+"\" alt=\""+gBlankThumbAlt+"\" border=\"0\" />";
	str+="</a>"
	return str;
}
/*--------------------------------------------------------------------------*/
/* nicoSetTimer : timer set for next page display                           */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoSetTimer(page,lastFg){
	if(lastFg==false){
		gPage+=1;
		ghTim=setTimeout("nicoTimerProc()",gTimer);
	}else{
		gPage=0;
		ghTim=setTimeout("nicoTimerProc()",gTimer);
	}
}
/*--------------------------------------------------------------------------*/
/* nicoTimerProc : timer timeout handling                                   */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/25 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoTimerProc(){
	if(ghTim!=0){
		clearTimeout(ghTim);
	}
	nicoThumbnailDispProc(gPage);
}

/*--------------------------------------------------------------------------*/
/* nicoSetLoadStatus : set loading status (1:block,0:none)                  */
/*	Created : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*	Updated : 2008/12/24 By Teruyoshi Norikawa (NTTPC Communications,Inc.)  */
/*--------------------------------------------------------------------------*/
function nicoSetLoadStatus(status){
	switch(status){
	case 0:	// none
		document.getElementById(gWaitDivName).style.display='none';
		break;
	case 1:	// block
		document.getElementById(gWaitDivName).style.display='block';
		break;
	}
}