////////////////////////////////////////////////////////////////////
// Maxthon Website Scripts
////////////////////////////////////////////////////////////////////
var maxWebsite = {};

maxWebsite.counterLoadInterval = 10000; // ms
maxWebsite.counterDataURL = "http://www.maxthon.cn/api/counter";
maxWebsite.failedCounterCall = 0;

//----------------------------------------------------------
// Cookies Manager
//----------------------------------------------------------
function $cookies(method, name, value, ttl) {

	switch(method){
		case "get":
			var cookieArray = document.cookie.split("; ");
			for(var i=0; i<cookieArray.length; i++) {
				var item = cookieArray[i].split("=");
				if(item[0] == name){
					return item[1];
				}
			}
			return "";
			break;

		case "set":
			if(!ttl) ttl = 30;
			var date = new Date();
			date.setTime(date.getTime() + (ttl * 24*60*60*1000));
			document.cookie = name + '=' + value + '; expires=' + date.toGMTString() + '; path=/';
			break;

		case "del":
			document.cookie = name + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/';
			break;

	}

}


//----------------------------------------------------------
// Show/Hide element
//----------------------------------------------------------
function $toggle(id, bShow) {

	var obj = document.getElementById(id);
	if(!obj) return;

	if(bShow != undefined){
		if(bShow){
			bStyle = 'block';
		}else{
			bStyle = 'none';
		}
	}else{
//		alert(obj.style.display);
		if(obj.style.display != 'none'){
			bStyle = 'none';
		}else{
			bStyle = 'block';
		}
	}

	obj.style.display = bStyle;

}

function $toggleAll(id_prefix, begin, end){
	var show = 'block';
	var i;
	for(i=begin; i<=end; i++){
		var obj = document.getElementById(id_prefix + i);
		if(!obj) continue;
		if(obj.style.display != 'none'){
			show = 'none';
			break;
		}
	}
	for(i=begin; i<=end; i++){
		var obj = document.getElementById(id_prefix + i);
		if(!obj) continue;
		obj.style.display = show;
	}
}


//------------------------------------------------------------------
// Initialize the page
//------------------------------------------------------------------
maxWebsite.init = function(){
	maxWebsite.checkCurrentPage();
}


//------------------------------------------------------------------
// Check Current Page and highlight it
//------------------------------------------------------------------
maxWebsite.checkCurrentPage = function(){

	var currentPage = document.location.pathname.toString();
	currentPage = currentPage.substr(currentPage.lastIndexOf("/")+1, currentPage.length);
	if(currentPage.length < 1) return;

	var objMenu = document.getElementById("navMenu");
	if(!objMenu) return;

	var objs = objMenu.getElementsByTagName("A");
	for(var i=0; i<objs.length; i++){
		var page = objs[i].href;
		page = page.substr(page.lastIndexOf("/")+1, page.length);
		if(page == currentPage) objs[i].className = "buttons-active";
	}

}


//------------------------------------------------------------------
// 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, 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");
	if(obj) obj.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);

}
