var registeredMethods;

function registerRenderingMethods(methodList)
{
	registeredMethods = methodList;
	//alert(methodList["CleanTriggers"]);
}

/*
function parseUpdateXML(xmlDoc)
{
	last_modified = $(xml).find("UPDATES").attr("LAST_MODIFIED");
	// process all the fields
	var fieldsData      = new Object();
	var eventData       = new Object();
	var questionData    = new Object();
	var statResultsData = new Object();
	$(xmlDoc).find("FIELDS").find("FIELD").each(function()
    {
		var attrName  = $(this).attr("NAME");
		var attrValue = $(this).text();
		logMessage(LEVEL_DEBUG, attrName + " = " + attrValue);
		eval("fieldsData." + attrName + "='" + attrValue + "'");   
    });
	
	var eventInfo = $(xmlDoc).find("EVENT_INFOS").find("EVENT_INFOS").find("EVENT_INFO");
	var event     = eventInfo.find("EVENT");
	var general   = eventInfo.find("GENERAL");
	var question  = eventInfo.find("QUESTIONS").find("QUESTION");
	var answers   = eventInfo.find("QUESTIONS").find("ANSWERS").find("ANSWER");
	var statresults = $(xmlDoc).find("LIVE_STATS").find("U1_STAT_RESULT");
	var statresults_event = statresults.find("EVENT");
	var statresult_lines = statresults.find("RESULT").find("RESULTLINE");
	
	eventData.status           = eventInfo.attr("STATUS");
	eventData.number_of_pages  = eventInfo.attr("NUMBER_OF_PAGES");
	eventData.num_of_records   = eventInfo.attr("NUM_OF_RECORDS");
	eventData.page_number      = eventInfo.attr("PAGE_NUMBER");
	eventData.id               = event.attr("ID");
	eventData.type_id          = general.attr("TYPE_ID");
	eventData.status_id        = general.attr("STATUS_ID");
	eventData.event_name       = general.attr("EVENT_NAME");
	eventData.start_time       = general.attr("START_TIME");
	eventData.stop_time        = general.attr("STOP_TIME");
	
	questionData.index                   = question.attr("INDEX");
	questionData.format_id               = question.attr("FORMAT_ID");
	questionData.text                    = question.attr("TEXT");
	questionData.score                   = question.attr("SCORE");
	questionData.incorrect_answer_score  = question.attr("INCORRECT_ANSWER_SCORE");
	questionData.field_state             = question.attr("FIELD_STATE");
	
	var answers=new Array(); 
	answers.each(function()
	{
		var answer = new Object();
		indexValue = parseInt($(this).attr("INDEX"));
		answer.index       = indexValue;
		answer.text        = $(this).attr("TEXT");
		answer.field_state = $(this).attr("FIELD_STATE");
		answers[indexValue] = answer;
	});
	questionData.answers = answers;
	
	statResultsData.query_id       = statresults.attr("QUERY_ID");
	statResultsData.name           = statresults.attr("NAME");
	statResultsData.category       = statresults.attr("CATEGORY");
	statResultsData.data_accurate  = statresults.attr("DATA_ACCURATE");
	statResultsData.server_id      = statresults.attr("SERVER_ID");
	statResultsData.event_id       = statresults_event.attr("ID");
	statResultsData.event_name     = statresults_event.attr("NAME");
	statResultsData.event_platform = statresults_event.attr("PLATFORM");

	var resultlines=new Array(); 
	statresult_lines.each(function()
	{
		var resultline = new Object();
		var lineNum = parseInt($(this).attr("LINE_NUM"));
		
		var distribution = $(this).find("DISTRIBUTIONS").find("DISTRIBUTION");
		var datafields = $(this).find("DATAFIELDS").find("DATA");
		
		resultline.line_num     = lineNum;
		resultline.answer_value = distribution.attr("VALUE");
		
		datafields.each(function()
		{
			var attrName  = $(this).attr("TYPE");
			var attrValue = $(this).attr("VALUE");
			logMessage(LEVEL_DEBUG, attrName + " = " + attrValue);
			eval("resultline." + attrName.toLowerCase() + "='" + attrValue + "'");   
		});		
		
		
		resultlines[lineNum] = resultline;
	});
	
	statResultsData.resultlines = resultlines;
	
	return {
		    last_modified: last_modified,
			fields:	fieldsData,
			event: eventData,
			question: questionData,
			stat_results: statResultsData,
		   };
}
*/



function handleUpdate(data)
{
	var TEMPLATE_CLEAN_TRIGGERS       = 0;
	var TEMPLATE_DISPLAY_QUESTION     = 1;
	var TEMPLATE_DISPLAY_STATISTICS   = 2;
	var TEMPLATE_CORRECT_ANSWER       = 3;
	var TEMPLATE_FAN_FACT             = 4;
	var TEMPLATE_DISPLAY_USER_COMMENT = 5;
	
	
	logMessage(LEVEL_INFO, "handleUpdate().");
	
	logMessage(LEVEL_DEBUG, "Input Data: " + data);
	
	try
	{
		var xmlDoc = $.parseXML( data );
	}
	catch(err)
	{
			logMessage(LEVEL_ERROR, "Exception during XML parsing (" + data+ ") : " + err);
			logMessage(LEVEL_ERROR, "quitting");
			return;
	}
	
    
	
	
	logMessage(LEVEL_DEBUG, "Fields:");
	
	var fields = new Object();   
	
	// process all the fields
	$(xmlDoc).find("FIELD").each(function()
    {
		var attrName  = $(this).attr("NAME");
		var attrValue = $(this).text();
		logMessage(LEVEL_DEBUG, attrName + " = " + attrValue);
		eval("fields." + attrName + "='" + attrValue.replace("'","\\'") + "'");   
    });

	if (fields.template==undefined)
	{
		logMessage(LEVEL_WARNING, "(Template is undefined.)");
		var numeric_template = -1;
	} else {
		logMessage(LEVEL_DEBUG, "(got Template :" + fields.template + ")");
		var numeric_template = parseInt(fields.template);
	}
	//
	// fill additional information for questions
	//
	if (numeric_template == TEMPLATE_DISPLAY_QUESTION || numeric_template == TEMPLATE_DISPLAY_STATISTICS || numeric_template == TEMPLATE_CORRECT_ANSWER)
	{
		var question = new Object();
		question.text =  $(xmlDoc).find("QUESTION").attr("TEXT");
		question.event_id = $(xmlDoc).find("EVENT").attr("ID");
		question.event_type_id = $(xmlDoc).find("GENERAL").attr("TYPE_ID");
		// type ID 1  - quiz
		// type ID 2 - vote
		// type ID 7 - messageing
		
		var answers=new Array(); 
		$(xmlDoc).find("ANSWER").each(function()
		{
			var answer = new Object();
			indexValue = parseInt($(this).attr("INDEX"));
			answer.index          = indexValue;
			answer.text           = $(this).attr("TEXT");
			answer.correctness_id = $(this).attr("CORRECTNESS_ID");
			answers[indexValue] = answer;
		});
		question.answers = answers;
	}

	if (numeric_template == TEMPLATE_DISPLAY_STATISTICS)
	{
		var statResultsData = new Object();
		
		var statresults = $(xmlDoc).find("LIVE_STATS").find("U1_STAT_RESULT");
		var statresults_event = statresults.find("EVENT");
		var statresult_lines = statresults.find("RESULT").find("RESULTLINE");
		
		statResultsData.query_id       = statresults.attr("QUERY_ID");
		statResultsData.name           = statresults.attr("NAME");
		statResultsData.category       = statresults.attr("CATEGORY");
		statResultsData.data_accurate  = statresults.attr("DATA_ACCURATE");
		statResultsData.server_id      = statresults.attr("SERVER_ID");
		statResultsData.event_id       = statresults_event.attr("ID");
		statResultsData.event_name     = statresults_event.attr("NAME");
		statResultsData.event_platform = statresults_event.attr("PLATFORM");

		var resultlines=new Array(); 
		statresult_lines.each(function()
		{
			var resultline = new Object();
			var lineNum = parseInt($(this).attr("LINE_NUM"));
			
			var distribution = $(this).find("DISTRIBUTIONS").find("DISTRIBUTION");
			var datafields = $(this).find("DATAFIELDS").find("DATA");
			
			resultline.line_num     = lineNum;
			resultline.answer_value = distribution.attr("VALUE");
			
			datafields.each(function()
			{
				var attrName  = $(this).attr("TYPE");
				var attrValue = $(this).attr("VALUE");
				logMessage(LEVEL_DEBUG, attrName + " = " + attrValue);
				eval("resultline." + attrName.toLowerCase() + "='" + attrValue + "'");   
			});		
			
			
			resultlines[lineNum] = resultline;
		});
		
		statResultsData.resultlines = resultlines;
		
		//alert(dump(statResultsData));
	}

	if (numeric_template == TEMPLATE_DISPLAY_USER_COMMENT)
	{
		var statResultsData = new Object();
		
		var ptns = $(xmlDoc).find("PTN_INFOS").find("PTN_INFO");

		var ptnInfos=new Array(); 
		var index = 1;
		ptns.each(function()
		{
			var ptninfo = new Object();
			
			ptninfo.event_id 				= $(this).attr("EVENT_ID");
			ptninfo.receipt_id 				= $(this).attr("RECEIPT_ID");
			ptninfo.participation_tIME 		= $(this).attr("PARTICIPATION_TIME");
			ptninfo.update_time 			= $(this).attr("UPDATE_TIME");
			ptninfo.ptn_version 			= $(this).attr("PTN_VERSION");
			ptninfo.platform_id 			= $(this).attr("PLATFORM_ID");
			ptninfo.provider_id 			= $(this).attr("PROVIDER_ID");
			ptninfo.language_id 			= $(this).attr("LANGUAGE_ID");
			ptninfo.answer 					= $(this).attr("ANSWER");
			ptninfo.mod_status_id 			= $(this).attr("MOD_STATUS_ID");
			ptninfo.queue_id 				= $(this).attr("QUEUE_ID");
			ptninfo.sub_queue_id 			= $(this).attr("SUB_QUEUE_ID");
			ptninfo.score 					= $(this).attr("SCORE");
			ptninfo.total_score 			= $(this).attr("TOTAL_SCORE");
			ptninfo.amount 					= $(this).attr("AMOUNT");
			ptninfo.user_identifier 		= $(this).attr("USER_IDENTIFIER");
			ptninfo.user_status_id 			= $(this).attr("USER_STATUS_ID");
			ptninfo.is_banned 				= $(this).attr("IS_BANNED");
			ptninfo.nickname 				= $(this).attr("NICKNAME");
			ptninfo.nickname_validiTY_ID 	= $(this).attr("NICKNAME_VALIDITY_ID");
			ptninfo.user_details_veRSION 	= $(this).attr("USER_DETAILS_VERSION");
			ptninfo.broadcast_order 		= $(this).attr("BROADCAST_ORDER");
			ptninfo.birthdate 				= $(this).attr("BIRTHDATE");
			ptninfo.gender 					= $(this).attr("GENDER");
			ptninfo.has_image 				= $(this).attr("HAS_IMAGE");
			ptninfo.ptn_cancelled 			= $(this).attr("PTN_CANCELLED");
			ptninfo.ptn_create_time 		= $(this).attr("PTN_CREATE_TIME");
			ptninfo.status 					= $(this).attr("STATUS");
			
			ptnInfos[index] = ptninfo;
			index++;
		});
		
		//alert(dump(ptnInfos));
	
	}
	
	
	switch (numeric_template)
	{
		case TEMPLATE_CLEAN_TRIGGERS:
			registeredMethods["CleanTriggers"](fields);
			break;
		case TEMPLATE_DISPLAY_QUESTION:
			registeredMethods["DisplayQuestion"](fields, question);
			break;
		case TEMPLATE_DISPLAY_STATISTICS:
			registeredMethods["DisplayStatistics"](fields, question, statResultsData);
			break;
		case TEMPLATE_CORRECT_ANSWER:
			registeredMethods["CorrectAnswer"](fields, question);
			break;
		case TEMPLATE_FAN_FACT:
			registeredMethods["FanFact"](fields);
			break;
		case TEMPLATE_DISPLAY_USER_COMMENT:
			registeredMethods["DisplayUserComment"](fields, ptnInfos);
		default:
			logMessage(LEVEL_WARNING, "No Handler for type template : " + numeric_template);
			break;
	}
	
	logMessage(LEVEL_DEBUG, "Done:.");
}

