////////////////////////////////////////////////////////////////////
// Maxthon Website Scripts
////////////////////////////////////////////////////////////////////
var maxWebsite = {};

maxWebsite.counterLoadInterval = 10000; // ms
maxWebsite.counterDataURL = "../lishi.aspx?count=int";
maxWebsite.failedCounterCall = 0;



//------------------------------------------------------------------
// Update Counter
//------------------------------------------------------------------
maxWebsite.updateCounter = function(){

	if(maxWebsite.inCounterRequest) return;
	if(maxWebsite.failedCounterCall>10) return;

	// first time only
	if(!maxWebsite.targetCounterNumber){

		maxWebsite.targetCounterNumber = 0;
		maxWebsite.currentCounterNumber = 0;
		maxWebsite.counterDiff = 0;

		// another request
		maxWebsite.intervalLoad = setInterval("maxWebsite.updateCounter()", maxWebsite.counterLoadInterval);

		maxWebsite.intervalTick= setInterval("maxWebsite.counterTick()", 1000);

	}

	// load remote data
	var req;
	try { req = new XMLHttpRequest(); }
	catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
	catch (e) { return null; }}

	maxWebsite.startCounter = new Date();

	try{

		req.open("GET", maxWebsite.counterDataURL + '?' + Math.random(), true);
		req.onreadystatechange = get_cb(req);
		req.send('');
		maxWebsite.inCounterRequest = true;

	}catch(e){
		maxWebsite.failedCounterCall++;
	}

	req = null;

}

function get_cb(req) {
	return function() {
		if (req.readyState == 4){
			maxWebsite.updateCounterBinder(req);
			req = null;
		}
	};
}

//------------------------------------------------------------------
// Update Counter via Ajax - Binder
//------------------------------------------------------------------
maxWebsite.updateCounterBinder = function(req){

	if(req.status == 200 || req.status==0){

		var cnt = req.responseText;
		cnt = parseInt(cnt.replace(/,/g,''), 10);
		if(isNaN(cnt)) return;

		// first run
		if(maxWebsite.targetCounterNumber == 0){
			maxWebsite.targetCounterNumber = cnt - 10;
			maxWebsite.currentCounterNumber = cnt - 10;
		}

		maxWebsite.inCounterRequest = false;
		maxWebsite.counterTick(cnt);

	}else{

		maxWebsite.failedCounterCall++;

	}

}


//------------------------------------------------------------------
// Write Value to Counter Area
//------------------------------------------------------------------
maxWebsite.writeCounter = function(intNumber){

	intNumber = Math.round(intNumber);
	if(intNumber <= 0) return;

	var arrNumber = intNumber.toString().split("");
	arrNumber.reverse();

	var strNumber = [];

	var len = arrNumber.length - 1;
	for(var i=0;i<len;i++){
		strNumber.unshift(arrNumber[i]);
		if(i%3 == 2) strNumber.unshift(",");
	}
	strNumber.unshift(arrNumber[len]);

	strNumber = strNumber.join("");

	var obj = document.getElementById("counternumber");
	var obj2 = document.getElementById("counternumber2");
	var obj3 = document.getElementById("counternumber3");
	if(obj) obj.innerHTML = obj2.innerHTML = obj3.innerHTML = strNumber;

}


//------------------------------------------------------------------
// Counter Ticking
//------------------------------------------------------------------
maxWebsite.counterTick = function(intNumber){

	if(intNumber){

		// calculate diff
		var diff = intNumber - maxWebsite.targetCounterNumber;
		var timeDiff = maxWebsite.counterLoadInterval + (new Date() - maxWebsite.startCounter);
		diff = diff / timeDiff;

		maxWebsite.counterDiff = diff * 1000;

		maxWebsite.currentCounterNumber = maxWebsite.targetCounterNumber;
		maxWebsite.targetCounterNumber = intNumber;

	}else{

		// just add up with diff
		if(maxWebsite.currentCounterNumber < maxWebsite.targetCounterNumber){
			maxWebsite.currentCounterNumber += maxWebsite.counterDiff;
		}

	}

	maxWebsite.writeCounter(maxWebsite.currentCounterNumber);

}

