function Assess(sCategoryKey){
	this.StartingCategory=sCategoryKey;
	this.questions = new Array();
	this.AddQuestion = addQuestion;
	this.GetSetCategoryGrammar=getSetCategoryGrammar;
	this.GetSetCategoryRequest=getSetCategoryRequest
	this.GetAssessQuestionGrammar=getAssessQuestionGrammar;
	this.GetAssessQuestionRequest=getAssessQuestionRequest;
	this.SetCategory=SetCategory;

	function SetCategory(sCatKey){
		this.StartingCategory=sCatKey;
	}

	function addQuestion(sQuestionKey){
		var oQuestion = new Question(sQuestionKey);
		this.questions[this.questions.length]=oQuestion;
		return oQuestion;
	}
	
	function getSetCategoryGrammar(){
		var sGrammar="cn=Assess&act=SetCategory&crt=";
		sGrammar += "PageSize=100%26Reset=T%26categoryid="+sCategoryKey;
		return sGrammar;
	}
	

	function getSetCategoryRequest(sLabel){
		var sXml='<cnrequest label="'+sLabel+'" metricslog="false">';
		sXml += '<businessobject>Assess</businessobject>';
		sXml += '<action>SetCategory</action>';
		sXml += '<parameters>';
		sXml += '<parameter name="pagesize">100</parameter>';
		sXml += '<parameter name="reset">T</parameter>';
		sXml += '<parameter name="categoryid">'+this.StartingCategory+'</parameter>';
		sXml += '</parameters>';
		sXml += '<language>145042</language>'; 
		sXml += '</cnrequest>';
		return sXml;
	}


	function getAssessQuestionRequest(sLabel){
		var iLen = this.questions.length;
		var sXml='<cnrequest label="'+sLabel+'" metricslog="false">';
		sXml += '<businessobject>Assess</businessobject>';
		sXml += '<action>Assess</action>';
		sXml += '<parameters>';
		sXml += '<parameter name="pagesize">100</parameter>';
		sXml += '<parameter name="questioncount">'+iLen+'</parameter>';
		sXml += '<parameter name="categoryid">'+this.StartingCategory+'</parameter>';
		var sTemp, qIndex, oQuestion, oAnswers;
		var sPage = '<![CDATA[ {value:{';
		for(var i=0;i<iLen;i++){
			oQuestion = this.questions[i];
			qIndex = parseInt(parseInt(i)+1);
			sXml+='<parameter name="question'+qIndex+'">'+oQuestion.key+'</parameter>';
			oAnswers = oQuestion.GetAnswers();
			sXml+='<parameter name="answer'+qIndex+'">';
			sTemp="";
			if(i>0)
				sPage+=',';
			sPage += oQuestion.key+':';
			for(var n=0;n<oAnswers.length;n++){
				if(n>0)
					sTemp+=",";
				
				sTemp+=oAnswers[n].key;
				sPage+="'"+oAnswers[n].key+"'";
			}
			sXml+=sTemp+'</parameter>';
		}		
		sPage+='}}]]>';
		sXml += '<parameter name="returnproductinfo">1</parameter>';
		sXml += '<parameter name="generic"><AssessPages count="1" action="getquestion"><Page id="0">'+sPage+'</Page></AssessPages></parameter>';
		sXml += '</parameters>';
		
		sXml += '<language>145042</language>'; 
		sXml += '</cnrequest>';
		return sXml;
	}
	function getAssessQuestionGrammar(){
		var sGrammar="cn=Assess&act=Assess&crt=";
		var iLen = this.questions.length;
		var sTemp, qIndex, oQuestion, oAnswers;
		sGrammar+="categoryid="+this.StartingCategory+"%26pagesize=25%26questioncount="+iLen;
		for(var i=0;i<iLen;i++){
			oQuestion = this.questions[i];
			qIndex = parseInt(parseInt(i)+1);
			sGrammar+="%26";
			sGrammar += "question"+qIndex+"="+oQuestion.key+"%26";
			oAnswers = oQuestion.GetAnswers();
			sGrammar+="answer"+qIndex+"=";
			for(var n=0;n<oAnswers.length;n++){
				if(n>0)
					sGrammar+=",";
				sGrammar+=oAswers[n].key;
			}
		}
		return sGrammar;
	}
	
}
new Assess("");

function Question(sQuestionKey){
	this.key=sQuestionKey;
	this.answers=new Array();
	this.SetAnswer=setAnswer;
	this.GetAnswers=getAnswers;
	
	function setAnswer(sAnswerKey){
		this.answers[this.answers.length]=new Answer(sAnswerKey);
	}
	
	function getAnswers(){
		return this.answers;
	}
}
new Question("");

function Answer(sAnswerKey){
	this.key = sAnswerKey;
}

new Answer("");