//IPv4 Exhausion Counter V2.0L5.0 for Blog Parts-->
//(C)2007,2008,2009,2010 Intec NetCore,Inc. All Rights Reserved.
//ローカライズ
function getLocalizedString(key)	{
    try {
        var ret = localizedStrings[key];
        if (ret === undefined)
            ret = key;
        return ret;
    } catch (ex) {}
    return key;
}

// HTTP通信用、共通関数
function createXMLHttpRequest(cbFunc)	{
	var XMLhttpObject = null;
	try{
		XMLhttpObject = new XMLHttpRequest();
	}catch(e){
		try{
			XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				return null;
			}
		}
	}
	if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
	return XMLhttpObject;
}

//XMLファイル取得
function loadXMLFile()	{
	httpObj = createXMLHttpRequest(displayData);
	if (httpObj)	{
		httpObj.open("GET","http://inetcore.com/project/ipv4ec/data/getxday.php",true);
		httpObj.send(null);
	}
}

function displayData()	{
	if ((httpObj.readyState == 4) && (httpObj.status == 200))	{
		xmlData = httpObj.responseXML;
		ipv4ListTags = xmlData.getElementsByTagName("ipv4");
		xYearListTags = xmlData.getElementsByTagName("exhaustion_year");
		xMonthListTags = xmlData.getElementsByTagName("exhaustion_month");
		xDayListTags = xmlData.getElementsByTagName("exhaustion_day");
		yYearListTags = xmlData.getElementsByTagName("start_year");
		yMonthListTags = xmlData.getElementsByTagName("start_month");
		yDayListTags = xmlData.getElementsByTagName("start_day");
		zBlocksListTags = xmlData.getElementsByTagName("now_blocks");
		zAddressListTags = xmlData.getElementsByTagName("ipv4address_per_block");

		//
		xYear = xYearListTags[0].childNodes[0].nodeValue;
		xMonth = xMonthListTags[0].childNodes[0].nodeValue;
		xDay = xDayListTags[0].childNodes[0].nodeValue;
		yYear = yYearListTags[0].childNodes[0].nodeValue;
		yMonth = yMonthListTags[0].childNodes[0].nodeValue;
		yDay = yDayListTags[0].childNodes[0].nodeValue;
		zBlocks = zBlocksListTags[0].childNodes[0].nodeValue;
		zAddress = zAddressListTags[0].childNodes[0].nodeValue;
		
		//
		 on_loaded();
	}
}

//タイマ変数
var timer1 = null;
var timer2 = null;

//空きブロック数
var m = null;

//残存アドレス数
var IPv4add = null;

//受信文字列
var re = null;

//枯渇予想日
var XTime =null;

//起算日
var YTime = null;

//現在
var ZTime = null;

//起算時点での残りブロック数
var zBlocks = null;

//起算日時点でのアドレス数
var kisan = null;

//起算時点から枯渇日までの残り時間
var kisannokori = null;

//1秒あたりの減少数
var gensho = null;

//起算時点から現在までの経過時間
var keika = null;

//現在の残存アドレス数
var zanzon = null;
								
	
//タイマスタート
function startTimer()	{
	//初期表示
	document.getElementById("Text001").innerHTML = getLocalizedString('N/A');
	document.getElementById("Text002").innerHTML = getLocalizedString('N/A');
	document.getElementById("Text003").innerHTML = "";
	document.getElementById("Text004").innerHTML = getLocalizedString('N/A');
	document.getElementById("Text005").innerHTML = getLocalizedString('N/A');
	//表示内容を更新
	updateClock();
	//タイマーをスタート
	if (timer1 == null)	{
		timer1 = setInterval("updateClock();", 3600000);
	}
	if (timer2 != null)	{
		timer2 = setInterval("ViewAdd();",10);
	}
}

//枯渇時計の更新処理
function updateClock()	{
	//データファイルを取得
		loadXMLFile();
		//Timer2を始動
		timer2 = 1;
}




//受信時処理
function on_loaded(){
	//枯渇日
	XTime = new Date(xYear,xMonth,xDay).getTime();
		
	//起算日
	YTime = new Date(yYear,yMonth,yDay).getTime();
		
	//起算日時点でのアドレス数
	kisan = (zAddress *zBlocks);
	
	//起算時点から枯渇日までの残り時間
	kisannokori = (XTime-YTime)/1000;
		
	//1秒あたりの減少数
	gensho = kisan / kisannokori;
		
	//現在
	ZTimes = new Date().getTime();
	ZTime = ZTimes + 1000*60*60*24*30;
		
	//現在時から枯渇日までの残り日数
	var h = Math.floor((XTime-ZTime)/1000/86400);

	if (h>0){
		var i = h + getLocalizedString(' days');
	}
	else
	var i = getLocalizedString('Today(exhaustion?)');
	ViewAdd();
	
	//x-day
	var _strMonth;
	switch(xMonth)	{
		case "01":
			_strMonth = "Jan";
			break;
		case "02":
			_strMonth = "Feb";
			break;
		case "03":
			_strMonth = "Mar";
			break;
		case "04":
			_strMonth = "Apr";
			break;
		case "05":
			_strMonth = "May";
			break;
		case "06":
			_strMonth = "Jun";
			break;
		case "07":
			_strMonth = "Jul";
			break;
		case "08":
			_strMonth = "Aug";
			break;
		case "09":
			_strMonth = "Sep";
			break;
		case "10":
			_strMonth = "Oct";
			break;
		case "11":
			_strMonth = "Nov";
			break;
		case "12":
			_strMonth = "Dec";
			break;
	}
	
	document.getElementById("Text005").innerHTML = _strMonth + " " + xDay + ", " + xYear;
	
	//残り日数表示
	document.getElementById("Text002").innerHTML = i;
		
	//ブロック数表示
	document.getElementById("Text004").innerHTML = zBlocks + getLocalizedString('/256 blocks');
	
	j = Math.floor(zBlocks/256*100);
	if (j >= 0){
		document.getElementById("Text003").innerHTML = j+"%";
	}
	else
	document.getElementById("Text003").innerHTML = "";
	document.close();
}
	
function ViewAdd()	{
	//現在
	ZTimes = new Date().getTime();
	ZTime = ZTimes + 1000*60*60*24*30;
	//起算時点から現在までの経過時間
	keika = (ZTime-YTime)/1000;
	
	//現在の残存アドレス数
	zanzon = kisan - (gensho*keika);
	//残存アドレス数を整数に変換
	IPv4add = Math.floor(zanzon);
	//残存アドレスの桁区切り
	var l, m = '';
	IPv4add = '' + IPv4add;
	while ( (l = IPv4add.length) > 3 ) {
		m = "," + IPv4add.substr( l - 3, 3 ) + m;
		IPv4add = IPv4add.substr( 0, l - 3 );
	}
	IPv4add = '' + IPv4add + m;
	//残存アドレス数を表示
	if (document.getElementById("Text004").innerHTML ==getLocalizedString('Net Err')){
		document.getElementById("Text001").innerHTML = getLocalizedString('N/A');
	}
	else
	if (zanzon >0){
		document.getElementById("Text001").innerHTML = IPv4add
	}
	else
		document.getElementById("Text001").innerHTML = getLocalizedString('0(exhaustion?)');
		document.close();
}