var numberOfDays = 7;

var WEEK_DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var DAY_HOURS = ["00", "1 AM", "2 AM", "3 AM", "4 AM", "5 AM", "6 AM", "7 AM", "8 AM", "9 AM", "10 AM", "11 AM", "Noon", "1 PM", "2 PM", "3 PM", "4 PM", "5 PM", "6 PM", "7 PM", "8 PM", "9 PM", "10 PM", "11 PM" ];

var offset = 0;
var tweetTimes;
var beginTime = 0;
var tweetist;
var timeZoneOffset=0;

function drawMap(){
	var data = new google.visualization.DataTable();
	data.addColumn("string", "City");
	data.addColumn("string", "Name");
	var tweeple = tweetist.followers;
	data.addRows(tweeple.length);
	for(i = 0; i < tweeple.length; i++){
	   data.setCell(i, 0, tweeple[i].location);
	   data.setCell(i, 1, tweeple[i].name);
	}
	var map = new google.visualization.Map($(mapId));
	map.draw(data, {"mapType": "normal", "showTip": true});
}
function drawChart() {
	var numberOfHours = 24 * numberOfDays;
	var beginTimeInMillis = beginTime * 1000;
	var beginTimeDateTemp = new Date(beginTimeInMillis);
	var calc = beginTimeDateTemp.getTimezoneOffset()*(60*1000);
	beginTimeInMillis = beginTimeInMillis + (timeZoneOffset*1000) + calc;
	var beginTimeDate = new Date(beginTimeInMillis);
	beginTimeDate.setMinutes(0);
	beginTimeDate.setSeconds(0);
	beginTimeDate.setMilliseconds(0);
	var roundedBeginTime = beginTimeDate.getTime();

	var data = new google.visualization.DataTable(); 
	data.addColumn("string", "Time");
	data.addColumn("number", "tweeple");
	data.addRows(numberOfHours); 
	var tweetCounts = calculateTweetCounts(beginTimeDate, numberOfHours);
	for(i = 0; i < numberOfHours; i++){
		var strTweetTime = formatTime(roundedBeginTime + i * 60 * 60 * 1000);
		data.setValue(i, 0, strTweetTime); 
		data.setValue(i, 1, tweetCounts[i]);
	}
	var chart = new google.visualization.LineChart($(chartId));
	// console.log("Started Drawing the chart");
	chart.draw(data, {	title: "When",
						height: chartHeight,
						smoothLine: true,
						lineSize: 1,
						pointSize: 2,
						legend: "none"
				});
}
function formatTime(timeLong){
	var timeDate = new Date(timeLong);
	return WEEK_DAYS[timeDate.getDay()] + " " + DAY_HOURS[timeDate.getHours()];
}
function calculateTweetCounts(beginTimeDate, numberOfHours){
	var tweetCounts = new Array();
	for(var i = 0; i <= numberOfHours; tweetCounts[i++] = 0);
	var tweeple = tweetist.followers;
	for(var i = 0; i < tweeple.length; i++){
		var hasUserTweeted = new Array();
		//for(strTweetTime in tweeple[i].statuses){
		for(var j = 0; j < tweeple[i].statusTimes.length; j++){
			var tweetTime = tweeple[i].statusTimes[j] + offset;
			var index = Math.floor((tweetTime - beginTime) / (60 * 60));
			if(!hasUserTweeted[index]){
				hasUserTweeted[index] = true;
				tweetCounts[index]++;
			}
		}
	}
	return tweetCounts;
}
function drawCloud(){
	var data = new google.visualization.DataTable();
	data.addColumn("string", "tweet");
	data.addRows(allStatusCount);
	var k = 0;
	for(var i = 0; i < tweetist.followers.length; i++){
		for(var j = 0; j < tweetist.followers[i].statuses.length; j++){
			data.setCell(k++, 0, tweetist.followers[i].statuses[j]);
		}
	}
	var outputDiv = document.getElementById("wcdiv");
	var wc = new WordCloud($(cloudId));
	var wcOptions = {};
	wcOptions["n"] = 50;
	wc.draw(data, wcOptions);
}
function checkAndDrawChartAndCloud(){
	if(followerCount >= 0){
		var allLoadComplete = true;
		for(var i = 0; i < followerCount; i++){
			if(!tweetist.followers[i].loadComplete){
				allLoadComplete = false;
				break;
			}
		}
		if(allLoadComplete){
			$("lc1").style.background = "none";
			$("lc2").style.background = "none";
			$(cloudId).innerHTML = "";
			$(chartId).innerHTML = "";
			$("pb1").innerHTML = "";
			$("pb2").innerHTML = "";
			$("pb1").style.backgroundPosition = "-140px center";
			$("pb2").style.backgroundPosition = "-140px center";
			$("pb1").hide();
			$("pb2").hide();
			drawChart();
			drawCloud();
		}
		else{
			var percentage = Math.round(followersLoadedCount / followerCount * 100);
			var x = Math.round((1 - followersLoadedCount / followerCount) * 140);
			$("s1").show();
			$("s2").show();
			$("pb1").innerHTML = percentage + " %";
			$("pb1").style.backgroundPosition = "-" + x + "px center";
			$("pb2").innerHTML = percentage + " %";
			$("pb2").style.backgroundPosition = "-" + x + "px center";
		}
	}
}

