//tiinav
//legends
//controller
//events
package controller{
//import
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.display.Sprite;
import model.EventsModel;
import model.EventDataModel;
public class EventsController{
// variables
private var myXML:XML = new XML();
private var myXMLURL:URLRequest = new URLRequest("timeline.xml");
private var myLoader:URLLoader = new URLLoader(myXMLURL);
//an array to put all the data in so that I can use it to show on flash or whatever...
private var dateArray:Array = new Array();
private var infoArray:Array = new Array();
private var peopleArray:Array = new Array();
private var questionArray:Array = new Array();
private var answersArray:Array = new Array();
private var followUpArray:Array = new Array();
private var bonusArray:Array = new Array();
private var bonusAnswersArray:Array = new Array();
private var bonusFollowUpArray:Array = new Array();
//keep track of the event number when parsing the xml
private var eventNum:Number;
//working with the events model
private var _model:EventsModel;
//contructor function
public function EventsController(m:EventsModel){
//get the events model to work with
_model=m;
//parse the xml first
parseXML();
}
private function parseXML ():void
{
// listener for it to load and then do something with it
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
myLoader.load(myXMLURL);
}// end of public function Main
private function xmlLoaded(event:Event):void
{
// once the data is loaded, assign it to a variable
myXML = new XML(event.target.data);
//get the parts and put them into the corresponding arrays
getXMLParts(myXML);
//trace("Data loaded.");
//trace(myXML);
}
//gets the parts of the xml and puts them in their proper arrays
private function getXMLParts(a_xmlData:XML):void
{
trace("XML Output: Test");
trace("------------------------");
//grabs all the event blocks
var timelineList:XMLList = a_xmlData.children();
//start with no event
eventNum = -1;
for (var i:int = 0; i < timelineList.length(); i ++)
{
//there is only one timelineXML ,i = 0, - do I need this??
var timelineXML:XML = timelineList[i];
//trace("----------timeline---------------");
//trace(timelineXML.name() + " = " + timelineXML);
//takes all the parts of the question block and gets the name or tag and the text in side
//for each question block we get the list of children in it
var eventList:XMLList = timelineXML.children();
// j is the number for each event part
for (var j:int = 0; j < eventList.length(); j ++)
{
var eventXML:XML = eventList[j];
trace("----------event part---------------");
trace(eventXML.name() + " = " + eventXML);
//depending on the name of the event part (eventXML),
//then put those into their perspective arrays (with their own loops)
var theEventName:String = eventXML.name();
switch(theEventName)
{
case "date":
dateArray.push(eventXML);
//trace("dateArray length = " + dateArray.length);
//trace("date = " +dateArray[dateArray.length-1]);
//keeps track of which event for people and answers
eventNum++;
answersArray[eventNum] = new Array();
peopleArray[eventNum] = new Array();
bonusAnswersArray[eventNum] = new Array();
break;
case "date_info":
infoArray.push(eventXML);
break;
case "people":
var peopleList:XMLList = eventXML.children();
//make a multi-dimensional array per event
for (var k:int = 0; k < peopleList.length(); k ++)
{
var peopleXML:XML = peopleList[k];
trace("----------people---------------");
trace(peopleXML.name() + " = " + peopleXML);
peopleArray[eventNum].push(peopleXML);
trace(peopleArray.length + " " + peopleArray[eventNum].length);
//peopleArray[i][k] = peopleXML;
trace("person #" + ((peopleArray[eventNum].length)-1) + " = " +peopleArray [eventNum][peopleArray[eventNum].length-1]);
}//end for loop (event people)
break;
case "question":
var questionList:XMLList = eventXML.children();
for (var l:int = 0; l < questionList.length(); l ++)
{
var questionXML:XML = questionList[l];
trace("----------question---------------");
trace(questionXML.name() + " = " + questionXML);
var theQuestionName:String = questionXML.name();
switch(theQuestionName)
{
case "ques":
questionArray.push(questionXML);
break;
case "followup":
followUpArray.push(questionXML);
break;
default:
//if it is not a question or followup, then its the answers
//pushed in order will be:
//ans1 = 0 (a)
//ans2 = 1 (b)
//ans3 = 2 (c)
//correct = 3 (correct answer)
answersArray[eventNum].push(questionXML);
trace("answer #" + ((answersArray[eventNum].length)-1) + " = " +answersArray [eventNum][answersArray[eventNum].length-1]);
break;
}
}//end for loop (event question)
break;
case "bonus":
var bonusList:XMLList = eventXML.children();
for (var m:int = 0; m < bonusList.length(); m ++)
{
var bonusXML:XML = bonusList[m];
trace("----------bonus---------------");
trace(bonusXML.name() + " = " + bonusXML);
var theBonusName:String = bonusXML.name();
switch(theBonusName)
{
case "ques":
bonusArray.push(bonusXML);
break;
case "followup":
bonusFollowUpArray.push(bonusXML);
break;
case "person":
//do nothing
break;
default:
//if it is not a question or followup, then its the answers
//pushed in order will be:
//ans1 = 0 (a)
//ans2 = 1 (b)
//ans3 = 2 (c)
//correct = 3 (correct answer)
//bonusAnswersArray.push(bonusXML);
bonusAnswersArray[eventNum].push(bonusXML);
trace("bonus answer #" + ((bonusAnswersArray[eventNum].length)-1) + " = " +bonusAnswersArray [eventNum][bonusAnswersArray[eventNum].length-1]);
break;
}
}//end for loop (event bonus)
break;
default:
trace("not working");
break;
}//end switch statement for event parts
}//end for loop (event)
}//end for loop (timeline list)
trace("------------------------");
trace("END - XML Output: Test");
//change the event for the first time
changeEvent(0);
}//end of getXMLParts function
public function changeEvent(eventNumber:int):void{
trace("changing the Event data");
//this function is called in EventsView
//when the user clicks on something in the view, the controller changes stuff
//this way more than just the event.target can be passed
//get the info from the Arrays and assign them into the correct spots for the EventDataModel
var date:Number = dateArray[eventNumber];
var info:String = infoArray[eventNumber];
//last person is always for bonus
var people:Array = peopleArray[eventNumber];
var question:String = questionArray[eventNumber];
//three answers (0-2 )and the correct answer 3: (a,b,c)
var answers:Array = answersArray[eventNumber];
var followUp:String = followUpArray[eventNumber];
var bonusQuestion:String = bonusArray[eventNumber];
//three answers (0-2 )and the correct answer 3: (a,b,c)
//except one in which z is the correct answer: all!
var bonusAnswers:Array = bonusAnswersArray[eventNumber];
var bonusFollowUp:String = bonusFollowUpArray[eventNumber];
//assign a new event data model
var newEvent:EventDataModel = new EventDataModel(eventNumber, date, info, people, question, answers, followUp, bonusQuestion, bonusAnswers, bonusFollowUp);
//put the event data model into the event model
_model.legendEvent = newEvent;
//trace(_model.legendEvent.date);
}
}//end class
}//end package