var LOADING_STATUS_COUNT = 0;
var SHOUT_BOX_UPDATE_INTERVAL = 5000;
var LOAD_POSTS_UPDATE_INTERVAL = 500000;
var RECENT_POSTS_UPDATE_INTERVAL = 500000;
var MOST_VIEW_POSTS_UPDATE_INTERVAL = 600000;
var WHOONLINE_UPDATE_INTERVAL = 60000;
var shoutBox;


loadToElement(base_url+'user/user/box', null, 'infobox', null, true, null);

function loadHomePage() {
	loadLeftPane();
	loadRightPane();
}


function loadLeftPane() {
	loadMostViewPosts('day');
	if ('tat_ca' == category)
		loadRecentPostsCategorized();
	else	
		loadRecentPosts();
	loadFeaturedPosts('today');
}

function loadRightPane() {
	//loadUserBox();
	//loadAboutBox();
	//loadHomeStatistic();
	//loadHotTag();
	updateWhoOnline();
}

function loadHotTag() {
	loadToElement(base_url+'tag/wc/1', null, 'hot_tag', null, true, null);
}

function loadShoutBox() {
	loadToElement(base_url+'shoutbox/show_shout_box', null, 'shout_box', null, true,
	{
		onSuccess: function(transport) {
			shoutBox = new ShoutBox('shout_content');
			updateShoutBox();
		}
	});
}

function updateShoutBox() {
	loadToElement(base_url+'shoutbox/update_shout/'+shoutBox.curID, null, null, null, false,
	{
		onSuccess: function(transport) {
			shoutBox.update(transport.responseXML);
			setTimeout(updateShoutBox, SHOUT_BOX_UPDATE_INTERVAL);
		}
	});
}

function loadUserBox() {
	increaseStatusCount();
	new Ajax.Request(base_url+'user/box',
		{ method: 'post', 
			onSuccess: function(transport){
				decreaseStatusCount();
				$('loginbox').update(transport.responseText);
				loadShoutBox();
				loadAvatar(base_url+'user/loadavatar','user_box_avatar',60, 60);
			},
			onFailure: function(transport){		
				alert("load user box failed");
			}
		});
}

function updateWhoOnline(){
	loadToElement(base_url+'user/online',null, 'whosonline',null, false);
	setTimeout(updateWhoOnline, WHOONLINE_UPDATE_INTERVAL);
}

function doShout() {
	e =  $("shout_input_box");
	// escape first transform a Vietnamese characters to %<hex>, encodeURI transform % to %25, <hex> is then appended
	// escape is needed to eliminate HTML code
	// encodeURI is needed to successfully pass the string to server
	var shoutContent = encodeURIComponent(e.value);//encodeURI(escape(e.value));//encodeURI(escape(e.value));//escape(e.value);
	if (shoutContent != ""){		
		e.value = "";
		new Ajax.Request(base_url+'shoutbox/shout',
			{ method: 'post', 
				onSuccess: function(transport){
					shoutBox.update(transport.responseXML);
				},
				onFailure: function(transport){	
					alert("Cannot load shout box");
				},
				parameters:'shoutcontent='+shoutContent+'&curID='+shoutBox.curID
			});
	}
}

function loadAvatar(url, holderId, maxWidth, maxHeight) {
	loadToElement(url, null, holderId, "maxwidth="+maxWidth+"&maxheight="+maxHeight, false);
}

function loadAboutBox() {
	loadToElement(base_url+'about/box', null, 'about_box', null, true);
}

function updateMContentHTML(html) {
	var middlePane = $('middle_pane');	
	middlePane.update(html);
	
}

function loadMostViewPosts(type) {		
	if (!type) type = 'day';
	
	if (loadMostViewPosts.updateTimeOut) window.clearTimeout(loadMostViewPosts.updateTimeOut);
	increaseStatusCount();	
	new Ajax.Request(base_url+"blog/popular/topview/"+type+"/10/"+category,
	{ method: 'post', 
		onSuccess: function(transport){
			decreaseStatusCount();
			//display on notice bar
			$('row_most_view').update(transport.responseText);	
			Event.observe($('popular_alltime'), 'click', function(){loadMostViewPosts("alltime")});
			Event.observe($('popular_day'),'click',function(){ loadMostViewPosts("day")});
			Event.observe($('popular_week'),'click',function(){ loadMostViewPosts("week")});
			Event.observe($('popular_month'),'click',function(){ loadMostViewPosts("month")});
			//document.body.background="<?php echo base_url();?>images/theme1l.jpg";
			loadMostViewPosts.updateTimeOut = window.setTimeout('loadMostViewPosts(\''+type+'\')',MOST_VIEW_POSTS_UPDATE_INTERVAL);
		},
		onFailure: function(transport){
			decreaseStatusCount();
		}
	});
}

function loadRecentPosts(curRecentPage, type) {
	if (!curRecentPage)
		curRecentPage = 1;
	if (!type)
		type = 2;
	
	if (loadRecentPosts.updateTimeOut) window.clearTimeout(loadRecentPosts.updateTimeOut);
	increaseStatusCount();
	new Ajax.Request(base_url+'blog/default_controller/get_recent/'+category+'/'+curRecentPage+'/'+type, {	// get recent without a category.
		onSuccess: function(transport){
			decreaseStatusCount();
			$('row_recent_posts').update(transport.responseText);
			
			loadRecentPosts.updateTimeOut = window.setTimeout('loadRecentPosts('+curRecentPage+','+type+')', RECENT_POSTS_UPDATE_INTERVAL);
			window.setTimeout("imageresize('recententries',125,100);", 10000);
		},
		onFailure: function() {
			decreaseStatusCount();
		},
		parameters:"pnum="+curRecentPage
	});
}


function loadRecentPostsCategorized(type) {
	if (loadRecentPostsCategorized.updateTimeOut) window.clearTimeout(loadRecentPostsCategorized.updateTimeOut);
	increaseStatusCount();
	new Ajax.Request(base_url+'blog/default_controller/get_recent_categorized/'+type, {
		onSuccess: function(transport){
			decreaseStatusCount();
			$('row_recent_posts').update(transport.responseText);
			
			loadRecentPostsCategorized.updateTimeOut = window.setTimeout('loadRecentPostsCategorized()', RECENT_POSTS_UPDATE_INTERVAL);
		},
		onFailure: function() {
			decreaseStatusCount();
		}
	});
}

function loadFeaturedPosts(ofDate) {
	if (loadFeaturedPosts.updateTimeOut) window.clearTimeout(loadFeaturedPosts.updateTimeOut);
	loadToElement(base_url+'blog/default_controller/get_featured/'+category, null, 'row_featured_posts', "ofDate="+ofDate, true, 
	{
		onSuccess: function() {
			loadFeaturedPosts.updateTimeOut = window.setTimeout('loadFeaturedPosts("'+ofDate+'")', LOAD_POSTS_UPDATE_INTERVAL);	
		}
	}
	);
}

function increaseStatusCount(str) {
	LOADING_STATUS_COUNT++;
	if (str) showStatus(str);
	else showStatus("Loading....");
	
	//if (LOADING_STATUS_COUNT >= 1) showBlocker();
}
	
function decreaseStatusCount() {
	LOADING_STATUS_COUNT--;
	if (LOADING_STATUS_COUNT <= 0) {
		hideStatus();
		//hideBlocker();
		LOADING_STATUS_COUNT = 0;
	}
}

function loadToElement(url ,formID, recieveAreaID, additionalPostString, showLoading, property) {
	if (url == 'user/user/box') alert("HERE");
	var parameters = (additionalPostString==null)?"":additionalPostString;
	if (formID != null) {
		var form = $(formID);
		if (form != null)
			if (parameters == "") 
				parameters = form.serialize(false);
			else parameters += "&"+form.serialize(false);
	}

	if (showLoading) increaseStatusCount();
	new Ajax.Request(url,
		{ method: 'post', 
			onSuccess: function(transport){
				if (showLoading) decreaseStatusCount();
				if (recieveAreaID) $(recieveAreaID).update(transport.responseText);
				if (property && property.onSuccess) property.onSuccess.call(null, transport);
			},
			onFailure: function(transport){
				if (showLoading) decreaseStatusCount();
				if (property && property.onFailure) property.onFailure.call(null, transport);
			},
			parameters: parameters
		});
}

function loadToMiddle(url, formID, additionalPostString, showLoading, property, resizeImage) {
	var parameters = (additionalPostString==null)?"":additionalPostString;
	if (formID != null) {
		var form = $(formID);
		if (form != null)
			if (parameters == "") 
				parameters = form.serialize(false);
			else parameters += "&"+form.serialize(false);
	}

	if (showLoading) increaseStatusCount();
	new Ajax.Request(url,
		{ method: 'post', 
			onSuccess: function(transport){
				if (showLoading) decreaseStatusCount();
				updateMContentHTML(transport.responseText);
				if (resizeImage) window.setTimeout("imageresize('middle_pane',125,100);", 1000);
				if (property && property.onSuccess) property.onSuccess.call(null, transport);
			},
			onFailure: function(transport){
				if (showLoading) decreaseStatusCount();
				if (property && property.onFailure) property.onFailure.call(null, transport);
			},
			parameters: parameters
		});
}

/**************** STATUS ************************************/
function repositionStatus() {
	var e = $('statusline');
	if (!e) return false;
	var left = document.all?e.offsetParent.scrollLeft:window.pageXOffset;
	var top = document.all?e.offsetParent.scrollTop:window.pageYOffset;

	var iW = document.all?document.documentElement.clientWidth:window.innerWidth;
	var iH = document.all?document.documentElement.clientHeight:window.innerHeight;

	left = left+iW/2-e.offsetWidth/2;
	top = top+iH/2-e.offsetHeight/2;

	e.style.left = left+"px";
	e.style.top = top+"px";
}

function showStatus(str) {
	var e = $('statusline');
	if (!e) return false;
	e.innerHTML = str;
	
	if (e.style.display == "none")
		window.onscroll = function() {
			repositionStatus();
		};
		
	e.style.display = 'block';
	repositionStatus();

}

function hideStatus() {
	var e = $('statusline');
	if (!e) return false;
	e.innerHTML = "";
	e.style.display = 'none';
	window.onscroll = '';
}

