
	
function ResearchProvider(){ }

ResearchProvider.prototype = {
	
	init : function() {
		
		this.bod = Element.get("researchProvider");
		this.quizLink = Element.parseSelector("a.researchTest", this.body);
	}
	
	,BUFFER_URL : buildAbsolutePath("/modules/researchProvider/researchProvider.data.asp")
	
	,enableQuiz : function() {
		
		this.quizEvent = Events.add({
			 element: this.quizLink
			,type: "click"
			,handler: this.takeQuiz
			,context: this
		});
	}
	
	,takeQuiz : function() {
		
		Common.openCenteredPopup('providerQuiz', true);
		Common.renderTDAMButtons(Element.parseSelector("div.providerQuiz"));
		
		if(!this.quizPreviouslyAccessed) {
			
			this.QuizParts = {
				 trigger:Element.get("viewProviderQuizResults")
				,form:document.forms[document.forms.length -1]
			};
			
			 this.QuizParts.method = this.QuizParts.form.method;
			 this.QuizParts.approach = this.QuizParts.form.approach;
			
			Events.add({
				 element:this.QuizParts.trigger
				,type:"click"
				,handler:this.openResults
				,context:this
				,data:{get:"providerQuizResultsPage", hide:"providerQuizQuestionPage"}
			});
			
			Events.delegate(Element.parseSelector("#WSODPopup.providerQuiz"), "click", {
				 selector:"#backToQuestions"
				,type:"click"
				,context:this
				,handler:this.backToQuesions
				,data:{get:"providerQuizQuestionPage", hide:"providerQuizResultsPage"}
			});
		}
	}
	
	,openResults : function(e, el, id) {
		
		this.Buffer = this.Buffer || new ContentBuffer();
		this.Buffer.abortRequests();
		
		var els = this.QuizParts.method;
		var len = els.length;
		var method;
		
		while(len--) {
			if(els[len].checked) {
				
				method = els[len].value;
				break;	
			}
		}
		
		var approach;
		els = this.QuizParts.approach;
		len = els.length;
		
		while(len--) {
			if(els[len].checked) {
				approach = els[len].value;
				break;
			}
		}
		
		var args = {method : method, approach : approach};
		
		this.ids = id;
		
		this.Buffer.load({
			 debug: true
			,url: this.BUFFER_URL
			,method: "get"
			,contentType: "text/javascript"
			,context:this
			,preventEval:true
			,data:{
				data:DataFunctions.serializer.serialize(args)
			}
			,onload:  this.loadResults
			,onerror:this.failSilently
		});
	}
	
	,loadResults : function(oBuffer) {
		
		var data = oBuffer.getResult();
			data = DataFunctions.serializer.deserialize(data);
	
		var headings = data.headings;
		var bod = Element.get("quizResultsBody");
		var additiontext = "";
		var match, len;
		
		Element.remove(Element.parseSelector("*", bod));
		Element.create("div", {}, [
			 Element.create("h2", {}, "Research Provider Results")
			,data.noChoice? 
				Element.create("div", {}, "Based on your selections you most closely match the following research providers.")
			  : Element.create("div", {}, "Based on your selections you most closely match "+data.methodology+" methodology and "+data.approach+" approach.")
			,Element.create("br")
			,Element.create("a", {id:"backToQuestions", className:"normal decorations", href:"javascript:void(0);"}, "Modify Selections")
		], bod);
		
		if((len = data.bucket.both.length)) {
			
			match = len > 1? " matches" : " match";
			
			Element.create("h3", {className:"margTop40"}, len + match + " for selected Methodology and Approach", bod);
			
			new TableCreator_class({
				 parent:bod
				,data:data.bucket.both
				,headings:headings
			}).draw();
			
			additiontext = " additional";
		}
		
		if((len = data.bucket.methods.length)) {
			
			match = len > 1?  " matches" : " match";
			
			Element.create("h3", {className:"margTop40"}, data.bucket.methods.length + additiontext + match +" for selected Methodology", bod);
			
			new TableCreator_class({
				 parent:bod
				,data:data.bucket.methods
				,headings:headings
			}).draw();
			
			additiontext = " additional";
		}
		
		if((len = data.bucket.approach.length)) {
			
			match = len > 1?  " matches" : " match";
			
			Element.create("h3", {className:"margTop40"}, data.bucket.approach.length + additiontext + match + " for selected Approach", bod);
			
			new TableCreator_class({
				 parent:bod
				,data:data.bucket.approach
				,headings:headings
			}).draw();
		}
		
		Element.addClass(Element.get(this.ids.hide), "none");
		Element.removeClass(Element.get(this.ids.get), "none");
		
		var blocker = Element.get("WSODPopupBlocker");
		    blocker.style.height = (document.body.scrollHeight + 40) + "px";
	}
	
	,backToQuesions : function(e, el, data) {
		
		Element.addClass(Element.get(data.hide), "none");
		Element.removeClass(Element.get(data.get), "none");
	}
	
	,failSilently : function() {
		if(window.console && console.info) {
			console.info("error loading results for provider test.");	
		}
	}
}

loadBuffer.add(function() {

	var researchProvider = new ResearchProvider();
		researchProvider.init();
		researchProvider.enableQuiz();
		
	window.researchProviderTest = researchProvider;
});
