////////////////////////////////////////////////////////////////////
// Maxthon Website Scripts
////////////////////////////////////////////////////////////////////
var maxWebsite = {};

maxWebsite.counterLoadInterval = 10000; // ms

maxWebsite.counterDataURL = "http://www.maxthon.com/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);



}
