jQuery.fn.diagnosis = function()
{   
	checkFields();
	var question ="";
    function getAnswer(q,a,s)
    {
	    var question = "";
	    var answer = "";
	    // if start again was pressed
	    if(s){
		    var postData = "&startAgain=" + s;
	    }
	    // if answer is present (next button pressed)
	    else if(a){
        	var postData = "&questionID=" + q +"&answerID=" + a; //live data
    	}
    	// answer not present (previous button pressed)
    	else{
	    	var postData = "&questionID=" + q;
    	}
       
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: window.location.href,
            data: postData,
            //data: {},
            dataType: "json",
            contentType: "application/x-www-form-urlencoded",
            error: function(errorData, errorData1)
            {
                alert("error" + errorData + errorData1);
                return false;
            },
            success: function(returnedData)
            {
	            // loop through question/answers
	            var l = returnedData.diagnosis.section.length;
	            
	           
                for (i=0;i<l;i=i+1)
                {
                    var questionType = returnedData.diagnosis.section[i].qtype;
                    var questionText = returnedData.diagnosis.section[i].qtext;
                    var ID = returnedData.diagnosis.section[i].id;
   					var firstOptionID;
   					//if node is a question
                    if (questionType == 'question'){
	                    // if question is final question
	                   if(i == (l-1)){
	                    	var le = returnedData.diagnosis.section[i].qoptions.length;
	                    	var answerList="<fieldset class='frmGroupList'><ul>";
	                    		//loop through answers
		                    	for (u=0;u<le;u=u+1)
	               				{
		                    		var text = returnedData.diagnosis.section[i].qoptions[u].qoption;
		                    		var a = returnedData.diagnosis.section[i].qoptions[u].id;
		                    		// only show answer radio buttons for final question on page
		                    		
		                    			answerList += "<li><label class='lblRdo' for='"+a+"'><input type='radio' name='"+ID+"' id='"+a+"' value='radioOption'/>"+text+"</label><input type='hidden' name='"+a+"' id='"+a+"' value='"+a+"' /></li>";
		                    			// store id of first radio button for parent label
		                    			if (u =='0'){
		                    				firstOptionID = a;
	                    				}
	                    		}
	                    	answerList +="</ul></fieldset>";
                    	}
                    	// previous questions
                    	else{
	                    	var le = returnedData.diagnosis.section[i].qoptions.length;
	                    	var answerList="";
	                    		//loop through answers
	                    	for (u=0;u<le;u=u+1)
               				{
	               				var text = returnedData.diagnosis.section[i].qoptions[u].qoption;
	               				
                    			// find which previous options were selected and display them
                    			if (returnedData.diagnosis.section[i].qoptions[u].checked =='True')
                    			{
                    				answerList += "<dd>Answer was: "+text+"</dd>";
                				}
                    		}
                    		answerList +=""
                    	}
                    	// build up question markup depending of position of question in history
                    	if(i == (l-1)){
	                    	question += "<div class='frmRow question' id='"+ID+"'><label for='"+firstOptionID+"'>"+questionText+"</label>"+answerList+"</div>";
                    	}
                    	else{
	                    	question += "<dt class='question' id='"+ID+"'>"+questionText+"</dt>"+answerList;
                    	}
                    	
                    }
                    // build up answer markup
                    else if (questionType = 'answer'){
	                	var answer= "<div class='frmRow answer highlight' id='"+ID+"'>"+questionText+"</div>";
                    }
                }
                
                // if more than one question exists
                if (l>1){
	                questionParts = question.split("<div");
	                // add defintion list start and end tags
	                if(questionParts.length =='1'){
	                	question = "<div class='module highlightB'><div class='content'><dl>"+question+"</dl></div></div>";
                	}
	                else if(questionParts.length =='2'){
	               	 	question = "<div class='module highlightB'><div class='content'><dl>"+questionParts[0]+"</dl></div></div><div";
		                question += questionParts[1];
	                }
                }
                
                // if an answer is present, add it to question markup
                if(answer){
                	var QASet = question + answer;
            	}
            	else{
	            	var QASet = question;
            	}
                addQuestions(QASet);
            }
        });
    };


    //set event on submit button
    $(this).find(".submit").click(function()
    {
	    var answerID, questionID;
	    $(this).parents("#iQuestions").find(".question").each(function(i){
		    questionID = $(this).attr("id");
		})
		
	    $(this).parents("#iQuestions").find(":radio").each(function(i){
		    if ($(this).is(":checked")){
			    answerID = $(this).parent().next().attr("value");
		    }
	    })
	    
	    if(answerID){
    		getAnswer(questionID,answerID);
		}
		else{
			if(!$('.questionList').children('div').hasClass('.help')){
				$('.questionList').prepend("<div class='help'><p>Please select an answer.</p></div>");
			}
		}
    	return false;
    });
    
    $(this).find(".previous").click(function()
    {
	    var questionID;
	    var n = $(this).parents("#iQuestions").find(".question").length;
	    $(this).parents("#iQuestions").find(".question").each(function(i){
		    if(i == (n-2)){
		    	questionID = $(this).attr("id");
	    	}
		})
		getAnswer(questionID);
    	return false;
    });
    
    $(this).find(".startAgain").click(function()
    {
	    getAnswer('','','true');
    	return false;
    });
    
    
    function addQuestions(QASet){
	    $("#iQuestions").find(".questionList").html(QASet);
	    checkFields();
    }
    
    // check the fields to determine which buttons to show
    function checkFields(){
	    // remove back button if only one question
	    if($('.questionList').find('.question').length =='1'){
			$('#iQuestions').find('.previous').addClass("js-hide");
	    }
	    else{
		    $('#iQuestions').find('.previous').removeClass("js-hide");
	    }
	    
	    // remove next button if an answer is present
	    if($('.questionList').find('.answer').length>0){
				$('#iQuestions').find('.submit').addClass("js-hide");
			}
			else{
				$('#iQuestions').find('.submit').removeClass("js-hide");
			}
	}
   
};
