/**
 * @author alexrich
 */

diggSingleton = function(){
	var storiesAndDigger = new Array();
	var usernameAndFullName = new Array();
	var numberOfDiggers;
	var numberOfSubmitters;
	var allSubmitsChecked = false;
	var allDiggsChecked = false;
	
	function getUserFriendsCb(data, user){
		var arrayOfUsernames = new Array();
		
		if (!data.users || !data.users.length) 
			return;
		numberOfDiggers = data.users.length;
		numberOfSubmitters = data.users.length;
		for (var i = 0; i < data.users.length; i++) {
			usernameAndFullName[i] = {
				username: data.users[i].name,
				fullname: data.users[i].fullname
			};
			digg.getUserDiggs(getUserDiggsCb, handleError, data.users[i].name, {
				count: 20
			});
			digg.getUserSubmissions(getUserSubmissionsCb, handleError, data.users[i].name,{
				count: 20
			});
		}
	}
	function getUserDiggsCb(data, username){
		numberOfDiggers--;
		for (var i = 0; i < data.diggs.length; i++) {
			storiesAndDigger[storiesAndDigger.length] = {
				story: data.diggs[i].story,
				username: data.diggs[i].user,
				date: data.diggs[i].date
			};
		}
		if (numberOfSubmitters == 0 && numberOfDiggers == 0) {
			getStories();
		}
	}
	
	function getUserSubmissionsCb(data, username){
		numberOfSubmitters--;
		for (var i = 0; i < data.stories.length; i++) {
			var storyId = parseInt(data.stories[i].id);
			storiesAndDigger[storiesAndDigger.length] = {
				story: storyId,
				username: data.stories[i].user.name,
				date: data.stories[i].submit_date
			};
		}
		if(numberOfSubmitters == 0 && numberOfDiggers == 0){
			getStories();
		}
	}
	
	function getStories(){
		var justStories = new Array();
		for (var i = 0; i < storiesAndDigger.length; i++) {
			justStories[i] = storiesAndDigger[i].story;
		}
		
		justStories = eliminateDuplicates(justStories);
		
		digg.getStories(getStoriesCb, handleError, justStories, {
			count: 20
		});
	}
	
	function eliminateDuplicates(stories){
		var tempArray = new Array();
		var hasDupe = false;
		for (var i = 0; i < stories.length; i++) {
			for (var j = i + 1; j < stories.length; j++) {
				if (stories[i] == stories[j]) {
					hasDupe = true;
				}
			}
			if (hasDupe == false) {
				tempArray.push(stories[i]);
			}
			hasDupe = false;
		}
		return tempArray;
	}
	
	function getStoriesCb(data, arrayOfStoryIds){
		var stories;
		stories = data.stories;
		stories = getDateSortedStories(stories);
		stories = overwriteFullName(stories);
		stories = reduceToTen(stories);
		
		printStories(stories);
		printStoriesPreview(stories, 1);
	}
	
	function reduceToTen(stories){
		var result = new Array();
		
		result = stories.slice(0,9);
		
		return result;
	}
	
	function overwriteFullName(stories){
		//this loop doesn't belong here
		for (var i = 0; i < storiesAndDigger.length; i++) {
			for (var j = 0; j < usernameAndFullName.length; j++) {
				if (storiesAndDigger[i].username == usernameAndFullName[j].username) {
					storiesAndDigger[i].fullname = usernameAndFullName[j].fullname;
				}
			}
		}
		
		for (var i = 0; i < stories.length; i++) {
			for (var j = 0; j < storiesAndDigger.length; j++) {
				if (stories[i].id == storiesAndDigger[j].story) {
					stories[i].user.fullname = storiesAndDigger[j].fullname;
				}
			}
		}
		
		return stories;
	}
	
	function getDateSortedStories(stories){
		var result;
		
		result = stories.sort(storiesSortFunction);
		
		return result;
	}
	
	function storiesSortFunction(a, b){
		return b.submit_date - a.submit_date;
	}
	
	function printStories(stories){
		var finalLoadSite = Ext.get("current-events");
		var loadSite;
		var masterTemplate = new Ext.XTemplate.from("currentEventMasterTemplate");		
		var arr = new Array();
		
		
		//quick fix to async problem
		if (!finalLoadSite) {
			loadSite = Ext.get("temp-current-events");
		}
		else{
			loadSite = finalLoadSite;
		}
		
		for (var i = 0; i < stories.length; i++) {
			var contributer = "";
			var story = stories[i];
			
			if (story.user.fullname != null) {
				contributer = "Contributed by: " + story.user.fullname;
			}
			
			arr.push({
				link: story.link,
				title: story.title,
				contributer: contributer,
				description: story.description
			});
		}
		
		arr = {
			currentEventsTemplate : arr
		};
		
		loadSite.dom.innerHTML = ""; //clear out loading text
		
		masterTemplate.append(loadSite, arr);
		
	}
	
	function printStoriesPreview(stories, num){
		var masterTemplate = new Ext.XTemplate.from("currentEventPreviewMasterTemplate");
		var loadSite;
		var finalLoadSite = Ext.get("current-events-preview");
		var arr = new Array();
		
		
		if(!finalLoadSite){
			loadSite = Ext.get("temp-current-events-preview");
		}
		else{
			loadSite = finalLoadSite;
		}

		for(var i=0; i<num; i++){
			var story = stories[i];
			arr.push({
				title: story.title,
				link: story.link
			});
		}
		
		arr = {
			currentEventsPreviewTemplate : arr
		};
		
		loadSite.dom.innerHTML = ""; //clear out loading text
		masterTemplate.append(loadSite, arr);
		masterTemplate.append("temp-current-events-preview", arr);
	}
	
	function getSpeechAdminFriends(){
		digg.getUserFriends(getUserFriendsCb, handleError, "KSUSpeechAdmin", {
			count: 20
		});
	}
	
	function handleError(data, user, level){
		var setABreakpoint; //hide error from end user
		Ext.MessageBox.alert("There was an error in current events.  The website will still work, but please help out the department by emailing sctdwebmaster@gmail.com to inform him/her of the error.");
	}

	return {
		init : function(){
			//digg.initialize("http://www.k-state.edu/CSTD/speech/");
			digg.initialize("http://www.cstd.k-state.edu/CommStudies/");
			Ext.get("temp-current-events").dom.innerHTML = "";
			getSpeechAdminFriends("KSUSpeechAdmin");
		}
	};
}();
