YAHOO.namespace("Youniverse");
YAHOO.Youniverse.moduleFeedback = function()
{
	this.paginator   = new YAHOO.Youniverse.paginator();
	this.currentPage = 1;
	
	this.MSSuid  = null;
	this.groupId = null;
	
	this.update = function ()
	{
		var MSSuid = YAHOO.util.Dom.get('moduleSelect').value;
		this.fetchModuleFeedback(MSSuid);
	}
	
	this.updateGroupFeedback = function (obj)
	{
		var temp = obj.value.split("+");
		var groupID = temp[0];
		var memberCount = temp[1];
		var groupLink = temp[2];
		if(groupID.length==0) return;
		this.initFeedbackFunctions(groupID);
		this.updateGroupIdentity(obj.options[obj.selectedIndex].innerHTML,groupID,memberCount,groupLink)
		
		// let's make this nice
		var moduleFeedbackResults 	= YAHOO.util.Dom.get('module-feedback-results');
		var segmentHistogram 		= YAHOO.util.Dom.get('segmentHistogram');
		var groupMatches 			= YAHOO.util.Dom.get('groupMatches');
		
		if(moduleFeedbackResults) moduleFeedbackResults.innerHTML = "<div class='feedbackLoading'></div>";
		if(segmentHistogram) segmentHistogram.innerHTML = "<div class='feedbackLoading'></div>";
		if(groupMatches) groupMatches.innerHTML = "<div class='feedbackLoading'></div>";
	}
	
	this.initFeedbackFunctions = function (sentGroupId)
	{
		var moduleId 	= YAHOO.util.Dom.get('inputModuleId').value;
		var ownerId 	= YAHOO.util.Dom.get('inputOwnerId').value;
		var groupId 	= (sentGroupId)? sentGroupId:YAHOO.util.Dom.get('inputGroupId').value;
		
		if(!moduleId||!ownerId||!groupId){
			return;
		}
		
		// fetchModuleFeedback
		this.fetchModuleFeedback(moduleId, ownerId, groupId);
		
		//fetchSegmentHistogram
		this.fetchSegmentHistogram(moduleId, groupId);
		
		//fetchGroupMatches
		this.fetchGroupMatches(moduleId, groupId);
		
	}
	
	this.updateGroupIdentity = function (name,id,num,slink){
		if(!name||!id||!num||!slink){
			return;
		}
		var bannerGroupName		= YAHOO.util.Dom.get('bannerGroupName');
		var bannerGroupNumbers	= YAHOO.util.Dom.get('bannerGroupNumbers');
		var groupHeadingName 	= YAHOO.util.Dom.get('groupHeadingName');
		var groupProfileLink 	= YAHOO.util.Dom.get('groupProfileLink');
		var leaveGroupLink 		= YAHOO.util.Dom.get('leaveGroupLink');
		if(bannerGroupName){
			bannerGroupName.innerHTML = name;
		}
		if(bannerGroupNumbers){
			var suffix = (num==1)? "":"s";
			bannerGroupNumbers.innerHTML = num + " Member" + suffix;
		}
		if(groupHeadingName){
			groupHeadingName.innerHTML = name;
		}
		if(groupProfileLink){
			groupProfileLink.href = "/us/" + slink;
		}
		if(leaveGroupLink){
			leaveGroupLink.href = "javascript:group_management.leaveGroup("+id+")";
		}
	}
	
	this.initCannedFeedbackFunctions = function (sentGroupId)
	{
		var moduleId 	= YAHOO.util.Dom.get('inputModuleId').value;
		var ownerId 	= YAHOO.util.Dom.get('inputOwnerId').value;
		var groupId 	= (sentGroupId)? sentGroupId:YAHOO.util.Dom.get('inputGroupId').value;
		
		if(!moduleId||!ownerId||!groupId){
			return;
		}
		
		// fetchModuleFeedback
		this.fetchModuleFeedback(moduleId, ownerId, groupId);
		
	}

	this.fetchModuleFeedback = function (MSSuid,ownerId,groupId)
	{
		if (!MSSuid)
		{
			return false;
		}
		
		var callback =
		{
			success: this.displayFeedback,
			failure: this.ajaxFailure,
			cache: false
		};
		
		var groupId = (groupId) ? groupId : '';
		var request = YAHOO.util.Connect.asyncRequest('GET', '/groups/group_feedback/' + MSSuid + '/' + ownerId + '/' + groupId, callback);
		return true;
	}
	
	this.displayFeedback = function (o)
	{
		var data = o.responseText;
		
		YAHOO.util.Dom.get('module-feedback-results').innerHTML = data;
	}
	
	this.fetchSegmentHistogram = function (MSSuid, groupId)
	{
		if (!MSSuid || !groupId)
		{
			return false;
		}
		
		var callback =
		{
			success: this.displaySegmentHistogram,
			failure: this.ajaxFailure,
			cache: false
		};
		
		var request = YAHOO.util.Connect.asyncRequest('GET', '/groups/segment_histogram.json?MSSuid=' + MSSuid + '&groupId=' + groupId, callback);
		return true;
	}
	
	this.displaySegmentHistogram = function (o)
	{
		
		if(!YAHOO.util.Dom.get('segmentHistogram')){
			return;
		}
		
		YAHOO.widget.Chart.SWFURL = "http://yui.yahooapis.com/2.5.2/build//charts/assets/charts.swf";
		
		var segmentData = YAHOO.lang.JSON.parse(o.responseText);
		
		var segmentDS = new YAHOO.util.DataSource( segmentData );
		segmentDS.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
		segmentDS.responseSchema =
		{
			fields: [ "displayName", "population", "percentage", "color" ]
		};
		
		var segmentChart = new YAHOO.widget.PieChart( "segmentHistogram", segmentDS,
		{
			dataField: "population",
			categoryField: "displayName",
			series:[{style:{colors:[0xF2A216, 0xCB2027, 0x864C9E, 0x3D58A7, 0x339999, 0xFF001A, 0x0D9A48, 0xA4CE39, 0xF15F22, 0xED2690, 0x71C9F1, 0x2E58A1, 0xE34982]}}],
			style:
			{
				padding: 20,
				legend:
				{
					display: "right",
					padding: 10,
					spacing: 5,
					font:
					{
						family: "Trebuchet MS",
						size: 13,
						color: 0xffffff
					}
				},
				background:
				{
					color: 0x000000
				}
			},
			
			//only needed for flash player express install
			expressInstall: "assets/expressinstall.swf"
		});
	}
	
	this.fetchGroupMatches = function (MSSuid, groupId, pageNum)
	{
		if (!MSSuid || !groupId)
		{
			return false;
		}
		
		this.MSSuid  = MSSuid;
		this.groupId = groupId;
		
		var callback =
		{
			success: this.displayGroupMatches,
			failure: this.ajaxFailure,
			argument: 
			{
				self: this
			},
			cache: false
		};
		
		var request = YAHOO.util.Connect.asyncRequest('GET', '/groups/fetch_group_matches/' + MSSuid + '/' + groupId + '/' + this.currentPage, callback);
		return true;
	}
	
	this.displayGroupMatches = function (o)
	{
		if (!YAHOO.util.Dom.get('groupMatches'))
		{
			return;
		}
		
		var data = o.responseText;
		var self = o.argument.self;
		
		YAHOO.util.Dom.get('groupMatches').innerHTML = data;
		
		// set up pagination
		var pageCount = YAHOO.util.Dom.get('numMatchPages').value;
		
		if (pageCount > 0)
		{
		  self.paginator.pagination(pageCount, self.currentPage, 'moduleFeedback.selectPage', 'matchPagination');
		}
	}
	
	this.selectPage = function (pageNum)
	{
		moduleFeedback.currentPage = pageNum;
		this.fetchGroupMatches(moduleFeedback.MSSuid, moduleFeedback.groupId, pageNum);
	};
	
	this.ajaxFailure = function (o)
	{
		if (o.status > -1) // if not user abort
		{
			alert(msg.translate('err02'));
		}
	}
}
