// this is the main entry point for the program

// globals
debug = false;

constants = new Constants();
utils = new Utils();
engine = null;
database = null;
questionpoolmanager = null;
pagerenderer = null;
layoutrenderer = null;
bookmarkmanager = null;
mousecontroller = null;
eventcontroller = null;
exercisemanager = null;
gaptextutilities = null;
audioplayer = null;
mediaTracker = null;
standardapi = null;
lmsManager = null;
shutdownComplete = false;
autoplayTask = null;

// components
component = new Array();
	
//tree = null;

contentlayer = null;
mainlayer = null;

var initialStepId = null;

// main entry point
function doStartup() {
	document.getElementById("progresstitle").innerHTML = "STARTING...";
	// determine Standards SCORM / AICC
	var scormEnabledProperty = getProjectProperty("scormEnabled");
	var aiccEnabledProperty = getProjectProperty("aiccEnabled");
	var scormEnabled = (scormEnabledProperty == "true");
	var aiccEnabled = (aiccEnabledProperty == "true");
			
	standardapi = new StandardAPI(scormEnabled, aiccEnabled);
	standardapi.load();
	
	window.setTimeout('startupThread()', 500);
}

function startupThread() {
    
    // prepare for icon-preload (skinLayout)
    var rootNode = skinLayoutXmlDocument.getElementsByTagName("layout")[0];
    var xParser = new XParser(skinLayoutXmlDocument);
    
    var iconsToPreload = xParser.evaluate("//icon", rootNode);
	
	// determine initial stepId (the step to start with)
	var metaTag = metaXmlDocument.getElementsByTagName("meta")[0];
	initialStepId = metaTag.getAttribute("initialStep");
	
	// initialize main components
	
	// modify meta-xml for tests
	questionpoolmanager = new QuickQuestionPoolManager(metaXmlDocument);	
	questionpoolmanager.createQuestionPoolOnXML();
	
	mousecontroller = new MouseController();
	database = new Database(metaXmlDocument, "tree");
	
	exercisemanager = new ExerciseManager();
	pagerenderer = new PageRenderer();
    
    engine = new Engine();
    if (initialStepId && initialStepId != "") {
		engine.setPreviewMode(true);
	}
	
	layoutrenderer = new LayoutRenderer();
	
	eventcontroller = new EventController();
	gaptextutilities = new GaptextUtilities();
	mediaTracker = new MediaTracker("mediaTracker");
	
	
	// components which require StandardAPI
	bookmarkmanager = new BookmarkManager();
	
	startWBT();//preloadIcons(iconsToPreload);
	
	
}



	
function getProjectProperty(name) {
	var value = "";
	var properties = metaXmlDocument.getElementsByTagName("project-properties");
	for (var i = 0; i < properties.length; i++) {
		if (properties[i].getAttribute("name") == name) {
			value = properties[i].getAttribute("value");
			break;
		}
	}
	return value;
	
}

function preloadIcons(icons) {
	iconCache = new Array();
	var numIconsLoaded = 0; 
	for (var i = 0; i < icons.length; i++) {
		var image = new Image();
		iconCache.push(image);
		image.onload = function() { 
			updateProgress(2);
			numIconsLoaded++;
			if (numIconsLoaded >= icons.length) {
				startWBT();
			}
		};
		image.src = "img/" + icons[i].firstChild.nodeValue;
		
		
	}
}


function startWBT() {
	
	var wbtTitle = database.getProjectTitle();
	parent.document.title = wbtTitle;
	layoutrenderer.render();
	contentlayer = document.getElementById("content");
	
	//initialStepId = "76f360dd-7dc6-4f53-94b7-f1de396e3f60";
	
	engine.init();
	
	var stepId = null;
	if (initialStepId == null) {
		stepId = getStepId();
	}
	else {
		stepId = initialStepId;
	}
	if (stepId) {
		engine.jumpToStep(stepId);
	}
	else {
		engine.jumpToFirstStep();
	}
	
	hideProgressView();
	
}

function getInnerSize() {
	var x,y;
	if (self.innerHeight) // all except Explorer
	{
		x = self.innerWidth;
		y = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
		// Explorer 6 Strict Mode
	{
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	var rectangle = new Rectangle(0, 0, x, y);
	return rectangle;
}


function doShutdown() {
	if (bookmarkmanager) bookmarkmanager.shutdown();
	if (exercisemanager) exercisemanager.shutdown();
	if (database) database.shutdown();
	if (engine) engine.shutdown();
	if (standardapi) standardapi.unload();
	if (parent.opener) {
		window.setTimeout("parent.opener.closeWindow()", 1500);
	}
    
}

function preview() {
    var utils = new Utils();
    database = new Database(metaXmlDocument);
	exercisemanager = new ExerciseManager();
    
    
    engine = new Engine();
    
	layoutrenderer = new LayoutRenderer();
	contentcontroller = new ContentController();
	mousecontroller = new MouseController();
	eventcontroller = new EventController();
	gaptextutilities = new GaptextUtilities();
	mediaTracker = new MediaTracker("mediaTracker");
	
	pagerenderer = new PageRenderer();
    pagerenderer.setStepId(initialStepId);
	pagerenderer.render();
}
