var statXmlDox = null;
var recentElement = null;
var statisticsElement = null;
// 次のリクエストまでの間隔(ms)
//5分
var statInterval = 10000;
//var statInterval = 300000;
var statTimerID = null;
var arrID = new Array(4);
var reuse_cluster = new Array(4);
var preview_cluster = -1;
var param = "req=" + escape("api/req.php?method=recent&type=99");

var viewPage = 0;
var rowLength = 0;

// MSSQLの日時文字列フォーマット
var format = "yyyy-MM-dd HH:mm:ss.SSS";
// 最近のチェック状況日時文字列フォーマット
var format2 = "MM/dd HH:mm";
// 最近のチェック状況日時文字列フォーマット
var format3 = "yy/MM/dd HH:mm";

var checkTotal;
var fraudTotal;

var initScroll = true;

// スクロールする画像の数
var discImgNum = 0;

var statRetry = 50;

var checkTotalHttpObj = null;
var fraudHttpObj = null;
var recentHttpObj = null;

function statStart(){
	setFraudTotal();
	setCheckTotal();
	setRecentFraud();
}

function setCheckTotal(){
	var sendData = "command=command06&type=1";
	checkTotalHttpObj = createXMLHttpRequest(insertCheckTotal);
	if (checkTotalHttpObj) {
		checkTotalHttpObj.open("POST",servleturl,true);
		checkTotalHttpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8;");
		checkTotalHttpObj.send(sendData);
	}
}

function insertCheckTotal(){
	if(checkTotalHttpObj.readyState == 4 && checkTotalHttpObj.status == 200){
 
		var fraudXmlDox = checkTotalHttpObj.responseXML;
		var root = fraudXmlDox.getElementsByTagName('webscan')[0];
		if(!root){
			self.setTimeout("setCheckTotal()", statInterval);
			return;
		}
		var methodElement = root.getElementsByTagName('method')[0];
		if(!methodElement){
			self.setTimeout("setCheckTotal()", statInterval);
			return;
		}
				
		var fraudTotalElement = methodElement.getElementsByTagName('web_check_total')[0];
		if(!fraudTotalElement){
			self.setTimeout("setCheckTotal()", statInterval);
			return;		
		}
		
		var fraudTotal = fraudTotalElement.firstChild.nodeValue;
		document.getElementById("check_total").innerHTML = fraudTotal;
		
		self.setTimeout("setCheckTotal()", statInterval);

	}else{
	}
}

 

function setFraudTotal(){
	var sendData = "command=command06&type=2";
	fraudHttpObj = createXMLHttpRequest(insertFraudTotal);
	if (fraudHttpObj) {
		fraudHttpObj.open("POST",servleturl,true);
		fraudHttpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8;");
		fraudHttpObj.send(sendData);
	}
}

function insertFraudTotal(){
	if ((fraudHttpObj.readyState == 4) && (fraudHttpObj.status == 200)){
		var fraudXmlDox = fraudHttpObj.responseXML;
		var root = fraudXmlDox.getElementsByTagName('webscan')[0];
		if(!root){
			self.setTimeout("setFraudTotal()", statInterval);
			return;
		}
		var methodElement = root.getElementsByTagName('method')[0];
		if(!methodElement){
			self.setTimeout("setFraudTotal()", statInterval);
			return;
		}
				
		var fraudTotalElement = methodElement.getElementsByTagName('web_fraud_total')[0];
		if(!fraudTotalElement){
			self.setTimeout("setFraudTotal()", statInterval);
			return;		
		}
		
		var fraudTotal = fraudTotalElement.firstChild.nodeValue;
		document.getElementById("fraud_total").innerHTML = fraudTotal;
		
		self.setTimeout("setFraudTotal()", statInterval);
		
	}
}

function setRecentFraud(){
	var sendData = "command=command06&type=3";
	recentHttpObj = createXMLHttpRequest(insertRecentFraud);
	if (recentHttpObj) {
		recentHttpObj.open("POST",servleturl,true);
		recentHttpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8;");
		recentHttpObj.send(sendData);
	}
}

function insertRecentFraud(){
	if ((recentHttpObj.readyState == 4) && (recentHttpObj.status == 200)) {
		statXmlDox = recentHttpObj.responseXML;
		var root = statXmlDox.getElementsByTagName('webscan')[0];
		if(!root){
			self.setTimeout("setRecentFraud()", statInterval);
			return;
		}
		
		if(initScroll){
			insertRecentSuspiciousInfo();
		}
		
		self.setTimeout("setRecentFraud()", statInterval);
	}
}

function insertRecentSuspiciousInfo()
{
	var discoveryArea = getDiscoveryArea();
	if(discoveryArea == null){
		return;
	}
	
	discImgNum = discoveryArea.getElementsByTagName('img').length;
	// get "recent" element
	var root = statXmlDox.getElementsByTagName('method')[0];
//	var recentElement = root.getElementsByTagName('recent')[0];

//	var sus = recentElement.getElementsByTagName('suspicious_url')[0];
//	if(sus){
		var row = root.getElementsByTagName('row');
		rowLength = row.length;
		
		if(rowLength == 0){
			return;
		}
		
		for(var i = 0; i < rowLength; i++){
			var flagElement = row[i].getElementsByTagName("download_flag")[0];
			var flag = flagElement.firstChild.nodeValue;
			if(flag == '10'){
				break;
			}
			if(i == rowLength - 1){
				return;
			}
		}
		
		curIndex = rowLength - 1;
		for(var i = 0; i < discImgNum; i++){
			var flagElement = row[curIndex].getElementsByTagName("download_flag")[0];
			var flag = flagElement.firstChild.nodeValue;
			if(flag != '10'){
				i--;
				curIndex++;
				if(curIndex >= rowLength){
					curIndex = 0;
				}				
				continue;
			}		
		
			var idElement = row[curIndex].getElementsByTagName("id")[0];
			var id = idElement.firstChild.nodeValue;
			var resultElement = row[curIndex].getElementsByTagName("result")[0];
			var result = resultElement.firstChild.nodeValue;
			var result_icon = resultToIcon(result);
			var ssRequestData = servleturl + "?command=command04";
			ssRequestData += "&id=" + id;
			ssRequestData += "&mode=" + "110";
			
			// URLと日付を取得
			var urlElement = row[curIndex].getElementsByTagName("url")[0];
			var url = maskURL(urlElement.firstChild.nodeValue);
			var dateElement = row[curIndex].getElementsByTagName("check_date")[0];
			var date = convertDateFormat(dateElement.firstChild.nodeValue, format, format3);			
			
			//a要素
			var a = "disc_a" + (i+1);

			//img要素
			var img = "disc_img" + (i+1);
			
			// 画像読み込み
			document.getElementById(a).href = ssRequestData;
			document.getElementById(img).src = ssRequestData;
			// 画像表示
			redrawReflectionInit(img, url, date, 0, result_icon);
			
			curIndex++;
			if(curIndex >= rowLength){
				curIndex = 0;
			}
//		}
		initScroll = false;		
	}
}

function convertDateFormat(str, format1, format2)
{
	bformat = new DateFormat(format1);
	aformat = new DateFormat(format2);
	convertstr = aformat.format(bformat.parse(str));
	return convertstr;
}


function refreshCheck(row, viewNum){
	for(var i = 0; i < viewNum; i++){
		idElement = row[i].getElementsByTagName("id")[0];
		if(arrID[i] != idElement.firstChild.nodeValue){
			return true;
		}
	}
	return false;
}

function pagePreview(){
	viewPage = viewPage - 1;
	insertRecentSuspiciousInfo();
}

function pageNext(){
	viewPage = viewPage + 1;
	insertRecentSuspiciousInfo();
}

function newImage(i, rect){
	// get "recent" element
	var root = statXmlDox.getElementsByTagName('webscan')[0];
	var recentElement = root.getElementsByTagName('recent')[0];
	
//	if(recentElement){
//		var sus = recentElement.getElementsByTagName('suspicious_url')[0];
//		if(sus){
			var flag = '';
			
			var row = root.getElementsByTagName('row');
			if(row){
				rowLength = row.length;
				if(curIndex >= rowLength){
					curIndex = 0;
				}
				
				while(flag != '10'){
					var flagElement = row[curIndex].getElementsByTagName("download_flag")[0];
					flag = flagElement.firstChild.nodeValue;
					if(flag != '10'){
						curIndex++;
						if(curIndex >= rowLength){
							curIndex = 0;
						}					
						continue;
					}
				}	
				
				idElement = row[curIndex].getElementsByTagName("id")[0];
				var id = idElement.firstChild.nodeValue;
				var ssRequestData = servleturl + "?command=command04";
				var resultElement = row[curIndex].getElementsByTagName("result")[0];
				var result = resultElement.firstChild.nodeValue;
				var result_icon = resultToIcon(result);
							
				ssRequestData += "&id=" + id;
				ssRequestData += "&mode=" + "110";
				
				var imgId = 'disc_img' + i;
				var imgElement = document.getElementById(imgId);
				
				var aId = "disc_a" + i;
				var aElement = document.getElementById(aId);
				aElement.href = ssRequestData;
				
				var urlElement = row[curIndex].getElementsByTagName("url")[0];
				var url = maskURL(urlElement.firstChild.nodeValue);
				var dateElement = row[curIndex].getElementsByTagName("check_date")[0];
				var date = convertDateFormat(dateElement.firstChild.nodeValue, format, format3);
				
				var childs = aElement.childNodes;
				var divElement = childs[0];
					
				while(divElement.hasChildNodes()){
					divElement.removeChild(divElement.firstChild);
				}
				
				// 新規Imageの作成
				var img = document.createElement('img');
				var imgId = 'disc_img' + i;
				img.className = 'reflect discovery_img';
				img.id = imgId;
				img.name = 'anim';
	
				img.src = ssRequestData;
				img.width = 195;
				img.height = 141;
				img.border = 0;			
				divElement.appendChild(img);
						
				redrawReflection(img.id, divElement.id, url, date, 0, result_icon);
				
				curIndex++;
				if(curIndex >= rowLength){
					curIndex = 0;
				}
			}
//		}
//	}
}

function createUrlDateNode(url, date){
	var pNode = document.createElement('span');
	pNode.className = 'discovery_text';
	var nobr = document.createElement('nobr');
	var url = document.createTextNode(url);
	nobr.appendChild(url);
	var br = document.createElement('br');
	var date = document.createTextNode(date);
	pNode.appendChild(nobr);
//	pNode.appendChild(br);
//	pNode.appendChild(date);
	
	return pNode;
}

function maskURL(url){
	if(url.length >= 22){
		url = url.substring(0, 19) + "...";
	}
	var index = url.indexOf("//");
	return url.substring(0, index + 2) + "****" + url.substring(index + 6, url.length);
}

function resultToIcon(result){
	var resultLen = result.length / 2;
	var icon = null;
	result = result.substring(0, resultLen);
	if(resultLen == 32){
		var i;
		for(var i = 1; i <= resultLen; i++){
			if(result.charAt(resultLen - i) != "0"){
				icon = getResultIcon(i);
				if(icon != null){
					return icon;
				}			
			}
		}
	}
	
	return '';
}

function getResultIcon(black){
	switch(black){
		case 3:
			return 'img/icon/f.gif';
			break;
		case 4:
			return 'img/icon/1.gif';
			break;
		case 7:
			return 'img/icon/b.gif';
			break;
		case 8:
			return 'img/icon/kou.gif';
			break;
		case 9:
			return 'img/icon/zei.gif';
			break;
		case 21:
			return 'img/icon/g.gif';
			break;
		case 22:
			return 'img/icon/pt.gif';
			break;
		case 28:
			return 'img/icon/v.gif';
			break;
		case 29:
			return 'img/icon/w.gif';
			break;
		case 30:
			return 'img/icon/s.gif';
			break;
		case 31:
			return 'img/icon/m.gif';
			break;
		default:
			return null;
			break;
	}	
}

function getDiscoveryArea(){
	var discoveryArea = document.getElementById('recent_discovery');
//	if(discoveryArea == null){
//		discoveryArea = document.getElementById('recent_discovery');
//	}
	
	return discoveryArea;
}