﻿var appWebsite = {};

appWebsite.counterLoadInterval = 10000; // ms
appWebsite.counterDataURL = web_js_config.path+"/counter";
appWebsite.failedCounterCall = 0;

appWebsite.updateCounter = function(){

	if(appWebsite.inCounterRequest) return;
	if(appWebsite.failedCounterCall>10) return;

	// first time only
	if(!appWebsite.targetCounterNumber){

		appWebsite.targetCounterNumber = 0;
		appWebsite.currentCounterNumber = 0;
		appWebsite.counterDiff = 0;

		// another request
		appWebsite.intervalLoad = setTimeout("appWebsite.updateCounter()", appWebsite.counterLoadInterval);

		appWebsite.intervalTick= setTimeout("appWebsite.counterTick()", 1000);

	}

	// load remote data
	var req;
	try { req = new XMLHttpRequest(); }
	catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
	catch (e) { return null; }}

	appWebsite.startCounter = new Date();

	try{

		req.open("GET", appWebsite.counterDataURL, true);
		req.onreadystatechange = get_cb(req);
		req.send('');
		appWebsite.inCounterRequest = true;

	}catch(e){
		appWebsite.failedCounterCall++;
	}

	req = null;

}

function get_cb(req) {
	return function() {
		if (req.readyState == 4){
			appWebsite.updateCounterBinder(req);
			req = null;
		}
	};
}

//------------------------------------------------------------------
// Update Counter via Ajax - Binder
//------------------------------------------------------------------
appWebsite.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(appWebsite.targetCounterNumber == 0){
			appWebsite.inCounterRequest = false;
			appWebsite.writeCounter(cnt);
//			appWebsite.targetCounterNumber = cnt - 10;
//			appWebsite.currentCounterNumber = cnt - 10;
		}
		else{
			appWebsite.inCounterRequest = false;
			appWebsite.counterTick(cnt);
		}
	}else{
		appWebsite.failedCounterCall++;
	}

}


//------------------------------------------------------------------
// Write Value to Counter Area
//------------------------------------------------------------------
appWebsite.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");
	if(obj) obj.innerHTML = strNumber;

}


//------------------------------------------------------------------
// Counter Ticking
//------------------------------------------------------------------
appWebsite.counterTick = function(intNumber){

	if(intNumber){

		// calculate diff
		var diff = intNumber - appWebsite.targetCounterNumber;
		var timeDiff = appWebsite.counterLoadInterval + (new Date() - appWebsite.startCounter);
		diff = diff / timeDiff;

		appWebsite.counterDiff = diff * 1000;

		appWebsite.currentCounterNumber = appWebsite.targetCounterNumber;
		appWebsite.targetCounterNumber = intNumber;

	}else{

		// just add up with diff
		if(appWebsite.currentCounterNumber < appWebsite.targetCounterNumber){
			appWebsite.currentCounterNumber += appWebsite.counterDiff;
		}
	}
	appWebsite.writeCounter(appWebsite.currentCounterNumber);

	appWebsite.intervalTick= setTimeout("appWebsite.counterTick()", 1000);
}
window.onload = appWebsite.updateCounter;