function markCalculation() {

    // Get jsonData from the Localstorage
    var jsonString = localStorage.getItem('JSON_FOR_NAV');
    // console.log('jsonData markCalculation');
    const jsonData = JSON.parse(jsonString);
    // console.log(jsonData);

	
	//Section Level foreach
	jsonData.sections.forEach(function(section, index) {

		var sectionMarks = section.section_marks;
		var sectionAttemptAny = section.section_attempt_any;
		var section_id = section.section_id;

		// console.log('sectionMarks : ', sectionMarks);
		// console.log('sectionAttemptAny : ', sectionAttemptAny);
		// console.log('#########################################################################');

       
		var sectionRandomID = section_id.split("_")[3];
		var Section_Marks = document.getElementById('Section_Marks_Id_'+ sectionRandomID);
		
		//condition for disable and enable Section Marks field
		if(sectionAttemptAny == "")
		{
			Section_Marks.disabled = true; 

		}
		else
		{
			Section_Marks.disabled = false; 
		}


        //send a object for  generateSingleQuestions() function using foreach and mark calc
		var ParentObjects = {
           
			'questionData'     : section,
			'parentMarks'      : sectionMarks,
			'parentAttemptAny' : sectionAttemptAny,
		}

	 var returnvalue = generateSingleQuestions(ParentObjects);
    //  console.log('returnvalue of child sum in section : ' , returnvalue);

	 if(sectionAttemptAny == "")
		{
			Section_Marks.value = returnvalue; 
			
		}

	});

}



//Function for Question Level foreach    
function generateSingleQuestions(ParentObjects)
{	
    var questionData = false;  //set default value for reciveing questionObjects

	//set values from QuestionObjects param if exists
	if(ParentObjects.hasOwnProperty('questionData'))
	{ 
		questionData = ParentObjects.questionData; 
	}
	
	var childMarks = 0;

	//Questions Foreach Start
	questionData.questions.forEach(function(Question, index) {
		
    var questionTypeFormets = "";		
	if(Question.question_type)
	{
		questionTypeFormets = Question.question_type;
	}	
	else
	{
		questionTypeFormets ='question_group';
	}
	
	//Questions Variables
	var questionType = questionTypeFormets;
	var questionMarks = Question.marks;
	var question_Id = Question.question_Id;

	// console.log('questionType : ' , questionType);
	// console.log('questionMarks : ' , questionMarks);
	// console.log('##########################################################');

    
    var	parentMarks = ParentObjects.parentMarks;
    var	parentAttemptAny = ParentObjects.parentAttemptAny;
	var DivideValue = parentMarks / parentAttemptAny;
	const twoDigitsAfterDecimal = DivideValue.toFixed(2);
	var MarkDivideValue = parseFloat(twoDigitsAfterDecimal);

	//this flag for avoid to show Infinity and NaN in the MarkField
    if (MarkDivideValue === Infinity || MarkDivideValue === NaN) {
		MarkDivideValue = 0;
	  }



    // console.log(MarkDivideValue)

    // console.log('parentMarks :  ', parentMarks);
    // console.log('new_parentAttemptAny :  ', parentAttemptAny);
    // console.log('new_Child_Mark_DivideValue : ', MarkDivideValue);
	// console.log('################################################################################');


	//end of section mark divided by section attempt any
	var QuestionMarkField = "";

	if(questionType == 'text')
	{
	  var QuestionId = question_Id.split("_")[1];	
	  QuestionMarkField = document.getElementById('Text_Question_Marks_Id_'+ QuestionId);
	  onlyQuestionMarks = questionMarks !== undefined && questionMarks !== "" ? questionMarks : 0;
	  var questionMarksINT = parseFloat(onlyQuestionMarks, 2);
	  childMarks = childMarks + questionMarksINT;
	}
	else if(questionType == 'group')
	{
	  var QuestionId = question_Id.split("_")[1];
	  QuestionMarkField = document.getElementById('Choice_Question_Marks_Id_' + QuestionId);
	  onlyQuestionMarks = questionMarks !== undefined && questionMarks !== "" ? questionMarks : 0;
	  var questionMarksINT = parseFloat(onlyQuestionMarks, 2);
	  childMarks = childMarks + questionMarksINT;
	}


	if (questionType == 'question_group')
	{   
		
        	//the objects contain QuestionGroup Data for send  generateGroupQuestions()
			var QuestionGroupObjects = {
				
				'questionGroupData': Question,
				'parentMarks'      : MarkDivideValue,
				'parentAttemptAny' : ParentObjects.parentAttemptAny,
				
			}

	    	var returnValue = generateGroupQuestions(QuestionGroupObjects); //function for forEach QuestionGroups and Questions
			onlyQuestionMarks = returnValue !== undefined && returnValue !== "" ? returnValue : 0;
			var questionGroupMarksINT = parseFloat(onlyQuestionMarks, 2);
			childMarks = childMarks + questionGroupMarksINT;
	 }
    else
	{
		if(ParentObjects.parentAttemptAny !== "")
		{
		   QuestionMarkField.value = MarkDivideValue;
		   QuestionMarkField.disabled = true;
		}
		else
		{    
		   QuestionMarkField.disabled = false;
    	}
	}
	 

    //sum the child marks to set parent
	
   

})

//End of Questions Foreach

// console.log('ChildMarks sum in Questions: ', childMarks);
return childMarks;

}



// function for QuestionGroups and QuestionGroup questions Level Foreach
function generateGroupQuestions(QuestionGroupObjects)
{
    //set default value for reciveing questionObjects
    var Question = false;
    //end of set default value for reciveing questionObjects


	//set values from QuestionObjects param if exists
	if(QuestionGroupObjects.hasOwnProperty('questionGroupData'))
	{ 
		Question = QuestionGroupObjects.questionGroupData; 
	}
	
	//end of set values from QuestionObjects param if exists
	    
        
	    //QuestionGroup Variables 
        var group_marks = Question.group_marks;
		var group_attempt_any = Question.group_attempt_any;
		var question_group_id = Question.question_group_id;
		//end of QuestionGroup Variables 

		// console.log('old_group_marks :  ', group_marks);
		// console.log('old_group_attempt_any :  ', group_attempt_any);
		// console.log('################################################################################');
	

        
		//Section AttemptAny for first level QuestionGroup
        var QuestionGroup_ID = question_group_id.split("_")[3];
        var Question_Group_Marks_Field = document.getElementById('Question_Group_Marks_Id_' + QuestionGroup_ID);

        if(QuestionGroupObjects.parentAttemptAny !== "" )
		{
			Question_Group_Marks_Field.value = QuestionGroupObjects.parentMarks !== undefined ? QuestionGroupObjects.parentMarks : ''; 				   
			group_marks= QuestionGroupObjects.parentMarks !== undefined ? QuestionGroupObjects.parentMarks : ''; 	//set the new value of group-marks using the divided value of parent marks			   
		    Question_Group_Marks_Field.disabled = true;


		}
		else
		{
			Question_Group_Marks_Field.disabled = false;

		}


		//condition for disable and enable QuestionGroup Marks field
		if(group_attempt_any == "")
		{
			Question_Group_Marks_Field.disabled = true; 
		}
		else
		{
			Question_Group_Marks_Field.disabled = false; 
		}
      

		var QuestionGroupObjects = {
				
			'questionData'    : Question,
			'parentMarks'     : group_marks,
			'parentAttemptAny': group_attempt_any,
			
		}

		
       var returnvalue =  generateSingleQuestions(QuestionGroupObjects);
	//    console.log('ReturnValue of child sum in questionGroup: ' , returnvalue);
       
	   if(returnvalue)
	   {
		if(group_attempt_any == "")
		{
			Question_Group_Marks_Field.value = returnvalue; 
			group_marks = returnvalue;
		}

	   }

	  
	return group_marks;


}
