/*
 * Copyright (c) 2005 Absolutely Training Limited
 * 
 * Created on 02-Dec-2005
 */
 
/* JSLint global function comment */
/*global   */ 

/**
 * Translation of the Java TestContainer class into JavaScript
 * 
 * @author paulb
 */
function TestContainer( props ) {
	this.id = null;
	this.name = null;
	this.totalNumberOfQuestions = null;
	this.maxNumberOfTest=null;
	this.courseId = null;
	this.courseName = null;
	this.resultCategoryGroup = null;
	this.questionGroups = [];
	this.questionGroupContainers = [];
	
	for ( var p in props ) {
		this[p] = props[p];
	}
}

TestContainer.prototype.getTotalNumberOfQuestions = function() {
    return this.totalNumberOfQuestions;
};

TestContainer.prototype.getMaxNumberOfTest = function() {
    return this.maxNumberOfTest;
};
TestContainer.prototype.getName = function() {
    return this.name;
};

TestContainer.prototype.getCourseName = function() {
	return this.courseName;
};

TestContainer.prototype.getCourseId = function() {
	return this.courseId;
};

TestContainer.prototype.getQuestionGroups = function() {
    return this.questionGroups;
};

TestContainer.prototype.getId = function() {
    return this.id;
};

TestContainer.prototype.getResultCategoryGroup = function() {
    return this.resultCategoryGroup;
};

/**
 * Finds {@link QuestionGroup}objects contained by child objects "and itself".
 * 
 * @return array list of questionObjects
 */
TestContainer.prototype.getQuestionGroupsRecursive = function() {
    var questionGroups = [];
    var subContainers = this.getQuestionGroupContainers();
	for ( var i = 0; i < subContainers.length; i++ ) {
		var testContainer = subContainers[i];
		questionGroups = questionGroups.concat( testContainer.getQuestionGroupsRecursive() );
    }
    questionGroups = questionGroups.concat( this.getQuestionGroups() );
    return questionGroups;
};

/**
 * Indicated whether the questiongroups within this container contain a certain question.
 * @param question question to look for in container
 * @return true if they do contain question
 */
TestContainer.prototype.containsQuestion = function(question) {
	for ( var i = 0; i < this.questionGroups.length; i++ ) {
		var questionGroup = this.questionGroups[i];
		var questions = questionGroup.getQuestions();
		for( var j = 0; j < questions.length; j++ ) {
			if (questions[j] === question) {
				return true;
			}
		}
	}
    return false;
};

TestContainer.prototype.getQuestionGroupContainers = function() {
    return this.questionGroupContainers;
};

TestContainer.prototype.getQuestionGroupContainersRecursive = function() {
    questionGroupContainers = new Array().concat( this.getQuestionGroupContainers() );
	for ( var i = 0; i < this.getQuestionGroupContainers().length; i++ ) {
		var testContainer = this.getQuestionGroupContainers()[i];
		questionGroupContainers = questionGroupContainers.concat( testContainer.getQuestionGroupContainersRecursive() );
    }
    return questionGroupContainers;
}


