var
	iActualPage = 1,
	nProblemPoints = 0, nPointsPerClickPage2, iSelectedResult2 = 1, nClicksPage2, // page 2
	nDataPoints = 0, nPointsPerClickPage3, iSelectedResult3 = 1, nClicksPage3, // page 3
	
	iSelectedResult4 = 0, llCheckboxValues, // page 4
	asSelectedRisk = new Array(
		'<span class="pathfinder_error">none<br/>selected</span>',
		'minimal',
		'low',
		'moderate',
		'high'
	),
	
	iSelectedResult1 = 0, // page5
	nMDM = -1,
	nEncounterType = -1,
	asMDM = new Array(
		'<span class="pathfinder_error">not available</span> [<span class="pathfinder_error_explanation">still to do: select level of risk</span>]',
		'straightforward',
		'low',
		'moderate',
		'high'
	),
	anLevels,
	iCodingType = 0,

	bProblemPointsCompleted, bDataPointsCompleted, bRiskCompleted,
	nMinutes=0;

function nr2name(i){
	if(i==1) return "one";
	else if(i==2) return "two";
	else if(i==3) return "three";
	else return (""+i);
}
	
function init_pathfinder(){
	setCodingType(0);
	init_pathfinder_values();
	nMinutes=0; 
	document.getElementById('time_select').selectedIndex = 0;
	//document.getElementById('time_value').innerHTML=nMinutes+'-'+(nMinutes+4);

	document.getElementById('encounter_type').selectedIndex = 0;
	document.getElementById('time_select').selectedIndex = 0;
}

function init_pathfinder_values(){
	nPointsPerClickPage2 = new Array(1,1,2,3,4);
	nPointsPerClickPage3 = new Array(1,1,1,1,2,1,2);	
	
	nProblemPoints = 0; iSelectedResult2 = 1; // page 2
	nDataPoints = 0; iSelectedResult3 = 1; // page 3
	iSelectedResult1 = 0;
	iSelectedResult4 = 0;
	bProblemPointsCompleted = false;
	bDataPointsCompleted = false;
	bRiskCompleted = false;

	document.getElementById('value_high_4').innerHTML = asSelectedRisk[0];
	document.getElementById('_actual_mdm').innerHTML = asMDM[0];
	bRiskCompleted = false;

	llCheckboxValues = new Array();
	for(var iRisk=1; iRisk<=4; iRisk++){
		llCheckboxValues[iRisk-1] = new Array();
		var lCheckboxes = document.getElementsByName('page4_checkbox_risk'+iRisk), iCheckbox;
		for(var iCheckbox=0; iCheckbox<lCheckboxes.length; iCheckbox++){
			llCheckboxValues[iRisk-1][iCheckbox] = 0;
		}
	}

	clear_page2();
	clear_page3();
	clear_page4();
	nMinutes = 0;
}

function clear_mdm(){
	init_pathfinder_values();
	document.getElementById('mdm_table').style.display='none';
	document.getElementById('mdm_results').style.display='none';
	document.getElementById('_actual_cpt_text').innerHTML = '';
	
	document.getElementById('command_page2').innerHTML = "<img src='../images/down.jpg'></img>click here to calculate";
	document.getElementById('command_page3').innerHTML = "<img src='../images/down.jpg'></img>click here to calculate";
	document.getElementById('command_page4').innerHTML = "<img src='../images/down.jpg'></img>click here to select";
		
	clear_page2();
	clear_page3();
	clear_page4();
	
	update_total_page2();
	update_total_page3();
	
	document.getElementById('problem_points').className='pathfinder_error';
	document.getElementById('data_points').className='pathfinder_error';
}

function init_time(){
	nMinutes=0;
	
	//document.getElementById('time_value').innerHTML=nMinutes+'-'+(nMinutes+4);
	
	var elSelect = document.getElementById('time_select');
	if(elSelect.options.length<22){
		elSelect.style.color = '#808080';
		var elOptionNew = document.createElement('option');
		elOptionNew.text = 'Please select';
		elOptionNew.value = '0';
		elOptionNew.style.color = '#FFFFFF';
		var elOptionOld = elSelect.options[0];  
		try {
			elSelect.add(elOptionNew, elOptionOld); // standards 
		}
		catch(ex) {
			elSelect.add(elOptionNew, 0); // IE 
		}
	}
	document.getElementById('time_select').selectedIndex = 0;
}

function clear_time(){
	document.getElementById('_actual_cpt_text').innerHTML = '';
	init_pathfinder_values();
	init_time();
}


function change_encounter_type(){
	var
		elSelect = document.getElementById('encounter_type'), bFirst;
	if(elSelect.options.length==7){
		elSelect.style.color = 'black';
		elSelect.remove(0);
		bFirst = true;
	}
	else bFirst = false;

	nEncounterType = elSelect.selectedIndex;
	
	if(bFirst){
		if(iCodingType==0) {
			document.getElementById('mdm_table').style.display='';
			document.getElementById('mdm_results').style.display='';
		}
		else document.getElementById('time_control').style.display='';
		document.getElementById('cpt_results').style.display='';
	}
	if(iCodingType==0) compute_level_from_mdm();
	else compute_level_from_time();	
	//document.getElementById('ontime_row').style.display='';
}


function change_coding_type(){
	if(iCodingType==0) setCodingType(1);
	else setCodingType(0);
}

function setCodingType(_iCodingType){
	iCodingType = _iCodingType;	

	var bStarted = (document.getElementById('encounter_type').options.length<7), sStarted = (!bStarted) ? 'none' : '';
	if(iCodingType==0){
		document.getElementById('type_button').innerHTML = 'Click here to code based on time';
		clear_time();
		document.getElementById('steps').style.display='';
		document.getElementById('subtitle').innerHTML='Let the MDM lead the way...';

		document.getElementById('time_control').style.display='none';
		document.getElementById('mdm_table').style.display=sStarted;
		document.getElementById('mdm_results').style.display=sStarted;
	}
	else{
		document.getElementById('type_button').innerHTML = 'Click here to return to MDM-based coding';
		clear_mdm();
		document.getElementById('steps').style.display='none';
		document.getElementById('subtitle').innerHTML='Coding based on time';

		document.getElementById('time_control').style.display=sStarted;
		document.getElementById('mdm_table').style.display='none';
	}
	
	document.getElementById('cpt_results').style.display=sStarted;	
	
	if(bStarted){
		if(iCodingType==0) compute_level_from_mdm();
		else compute_level_from_time();	
	}
}



function switchCalculator(iPage){
	if(iActualPage==iPage) hideCalculator(iPage);
	else showCalculator(iPage);
}

function showCalculator(iPage){
	if(iActualPage>1) hideCalculator(iActualPage);
	if(iPage>0) {
		document.getElementById("calculator"+iPage).innerHTML = document.getElementById("calculator_page"+iPage).innerHTML;
		eval('restore_page'+iPage+'()');
	}

	if(iPage==2) {
		bProblemPointsCompleted = true;
		document.getElementById('problem_points').className='pathfinder_noerror';
		compute_mdm();
	}
	if(iPage==3){
		bDataPointsCompleted = true;
		document.getElementById('data_points').className='pathfinder_noerror';
		compute_mdm();
	}

	iActualPage= iPage;
	if(iPage>0) document.getElementById('command_page'+iPage).innerHTML = "<img src='../images/up.jpg'></img>done";
}

function hideCalculator(iPage){
	document.getElementById("calculator"+iPage).innerHTML = '';
	iActualPage=1;
	//var sAction = (iPage==4) ? "select": "calculate"
	var sAction = "change";
	document.getElementById('command_page'+iPage).innerHTML = "<img src='../images/down.jpg'></img>click here to "+sAction;
}

/**
Page 2
*/

function update_total_page2(){
	document.getElementById('total_page2').innerHTML = nProblemPoints;
	document.getElementById('value_high_2').innerHTML = nProblemPoints;
	var iSelected;
	if(nProblemPoints<=1) iSelected = 1;
	else if(nProblemPoints==2) iSelected = 2;
	else if(nProblemPoints==3) iSelected = 3;
	else if(nProblemPoints>=4) iSelected = 4;
	iSelectedResult2 = iSelected;
}

function restore_page2(){
	for(var iButton=1; iButton<=nClicksPage2.length; iButton++)
		document.getElementById('page2_no'+iButton).innerHTML = nClicksPage2[iButton-1];
	update_total_page2();
}

function click_ckeckbox_page2(iButton){
	if(nClicksPage2[iButton-1]==0) {
		nClicksPage2[iButton-1]++;
		nProblemPoints += nPointsPerClickPage2[iButton-1];
		update_total_page2();
	}
	else{
		nClicksPage2[iButton-1]--;
		nProblemPoints -= nPointsPerClickPage2[iButton-1];
		update_total_page2();
		//for(var i=0; i<nClicks; i++) minus_button_page2(iButton);
	}
	compute_mdm();
}

function plus_button_page2(iButton, nMax){
	if(nMax<0 || nClicksPage2[iButton-1]<nMax){
		nClicksPage2[iButton-1]++;
		nProblemPoints += nPointsPerClickPage2[iButton-1];
		document.getElementById('page2_no'+iButton).innerHTML = nClicksPage2[iButton-1];
		update_total_page2();
	}
	else{
		var vHighlight = document.getElementById('highlight_page2_button'+iButton);
		if(vHighlight){
			vHighlight.style.fontWeight = 'bold';
			vHighlight.style.textDecoration = 'underline';
			setTimeout(
				"document.getElementById('highlight_page2_button"+iButton+"').style.fontWeight = 'normal';"+
				"document.getElementById('highlight_page2_button"+iButton+"').style.textDecoration = 'none';",
			1000);
		}
	}
	compute_mdm();
}

function clear_page2(){
	nProblemPoints  = 0;
	nClicksPage2 = new Array(0,0,0,0,0);

	document.getElementById('page2_no1').innerHTML = 0;
	document.getElementById('page2_no2').innerHTML = 0;
	document.getElementById('page2_no3').innerHTML = 0;
	document.getElementById('page2_no4').innerHTML = 0;
	//document.getElementById('page2_checkbox4').checked = false;
	document.getElementById('page2_no5').innerHTML = 0;

	document.getElementById('total_page2').innerHTML = nProblemPoints;
	document.getElementById('value_high_2').innerHTML = nProblemPoints;
	
	iSelectedResult2 = 1;
	compute_mdm();
}


/**
Page 3
*/

function update_total_page3(){
	document.getElementById('total_page3').innerHTML = nDataPoints;
	document.getElementById('value_high_3').innerHTML = nDataPoints;
	var iSelected;
	if(nDataPoints<=1) iSelected = 1;
	else if(nDataPoints==2) iSelected = 2;
	else if(nDataPoints==3) iSelected = 3;
	else if(nDataPoints>=4) iSelected = 4;
	iSelectedResult3 = iSelected;

	compute_mdm();
}

function click_ckeckbox_page3(iButton){
	if(nClicksPage3[iButton-1]==0) {
		nClicksPage3[iButton-1]++;
		nDataPoints += nPointsPerClickPage3[iButton-1];
		update_total_page3();
	}
	else {
		nClicksPage3[iButton-1]--;
		nDataPoints -= nPointsPerClickPage3[iButton-1];
		update_total_page3();
	}
}

function restore_page3(){
	for(var iButton=1; iButton<=nClicksPage3.length; iButton++)
		document.getElementById('page3_checkbox'+iButton).checked = (nClicksPage3[iButton-1] > 0);
	update_total_page3();
}



function clear_page3(){
	nDataPoints  = 0;
	nClicksPage3 = new Array(0,0,0,0,0,0,0);

	for(var iButton=1; iButton<=7; iButton++)
		document.getElementById('page3_checkbox'+iButton).checked = false;

	document.getElementById('total_page3').innerHTML = nDataPoints;

	iSelectedResult3 = 1; 
	document.getElementById('value_high_3').innerHTML = nDataPoints;

	compute_mdm();
}



/**
Page 4
*/


function click_ckeckbox_page4(iRisk){
	var lCheckboxes = document.getElementsByName('page4_checkbox_risk'+iRisk), iCheckbox, bHasOne;
	bHasOne = false;
	for(var iCheckbox=0; iCheckbox<lCheckboxes.length; iCheckbox++){
		if(lCheckboxes[iCheckbox].checked){
			bHasOne = true;
			llCheckboxValues[iRisk-1][iCheckbox] = 1;
		}
		else{
			llCheckboxValues[iRisk-1][iCheckbox] = 0;
		}
	}	
	if(iRisk>iSelectedResult4 && bHasOne){
		iSelectedResult4 = iRisk;
		document.getElementById('value_high_4').innerHTML = asSelectedRisk[iSelectedResult4];
	}
	else if(iRisk==iSelectedResult4 && !bHasOne){
		reevaluate_risk();
	}

	bRiskCompleted = (iSelectedResult4 > 0);
	compute_mdm();
}

function reevaluate_risk(){
	iSelectedResult4 = 0;
	for(var iRisk=1; iRisk<=4; iRisk++){
		for(var iCheckbox=0; iCheckbox<llCheckboxValues[iRisk-1].length; iCheckbox++){
			if(llCheckboxValues[iRisk-1][iCheckbox] > 0) {iSelectedResult4 = iRisk; break;}
		}
	}
	document.getElementById('value_high_4').innerHTML = asSelectedRisk[iSelectedResult4];
}

function restore_page4(){
	for(var iRisk=1; iRisk<=4; iRisk++){
		var lCheckboxes = document.getElementsByName('page4_checkbox_risk'+iRisk), iCheckbox;
		for(var iCheckbox=0; iCheckbox<lCheckboxes.length; iCheckbox++){
			lCheckboxes[iCheckbox].checked = (llCheckboxValues[iRisk-1][iCheckbox] > 0);
		}
	}
}

function clear_page4(){
	iSelectedResult4 = 0; 
	document.getElementById('value_high_4').innerHTML = asSelectedRisk[0];

	for(var iRisk=1; iRisk<=4; iRisk++){
		var lCheckboxes = document.getElementsByName('page4_checkbox_risk'+iRisk), iCheckbox;
		for(iCheckbox=0; iCheckbox<lCheckboxes.length; iCheckbox++){
			lCheckboxes[iCheckbox].checked = false;
			llCheckboxValues[iRisk-1][iCheckbox] = 0;
		}
	}
	bRiskCompleted = (iSelectedResult4 > 0);
	compute_mdm();
}

/**
Page 5
*/

function compute_mdm(){
	var sMDM;
	if(!bRiskCompleted || !bProblemPointsCompleted || !bDataPointsCompleted){
		sMDM = "<strong class='pathfinder_error'>not available</strong><br/><span class='pathfinder_error_explanation'>still to do: ";
		if(!bProblemPointsCompleted){
			sMDM += "calculate problem points";
			if(!bDataPointsCompleted || !bRiskCompleted) sMDM += ", ";
		}
		if(!bDataPointsCompleted){
			sMDM += "calculate data points";
			if(!bRiskCompleted) sMDM += ", ";
		}
		if(!bRiskCompleted){
			sMDM += "select level of risk";
		}
		sMDM+='</span>';
		
	}

	else{

		if(iSelectedResult4 == 0) nMDM = 0;
		else{
			var nForLevel = new Array(0,0,0,0);
			for(var iLevel=1; iLevel<=4; iLevel++){
				for(var iResult=2; iResult<=4; iResult++){
					if(eval("iSelectedResult"+iResult)>=iLevel) {
						nForLevel[iLevel-1]++;
						if(nForLevel[iLevel-1]>=2) nMDM=iLevel;
					}
				}
			}
		}
		sMDM = asMDM[nMDM];
		
	}

	document.getElementById('_actual_mdm').innerHTML = sMDM;

	compute_level_from_mdm();
}


function compute_level_from_mdm(){
	if(!bRiskCompleted || !bProblemPointsCompleted || !bDataPointsCompleted){
		sLevel = "<strong class='pathfinder_error'>not available</strong>";
		document.getElementById('cpt_row1').style.display = 'none';
		document.getElementById('cpt_row2').style.display = 'none';
	}
	else{
		switch(nEncounterType){
			case 0:
				switch(nMDM){
					case 1: anLevels = [99201, 99202]; break;
					case 2: anLevels = [99203]; break;
					case 3: anLevels = [99204]; break;
					case 4: anLevels = [99205]; break;
				}
			break;
			case 1:
				switch(nMDM){
					case 1: anLevels = [99212]; break;
					case 2: anLevels = [99213]; break;
					case 3: anLevels = [99214]; break;
					case 4: anLevels = [99215]; break;
				}
			break;
			case 2:
				switch(nMDM){
					case 1: anLevels = [99241, 99242]; break;
					case 2: anLevels = [99243]; break;
					case 3: anLevels = [99244]; break;
					case 4: anLevels = [99245]; break;
				}
			break;
			case 3:
				switch(nMDM){
					case 1: anLevels = [99221]; break;
					case 2: anLevels = [99221]; break;
					case 3: anLevels = [99222]; break;
					case 4: anLevels = [99223]; break;
				}
			break;
			case 4:
				switch(nMDM){
					case 1: anLevels = [99231]; break;
					case 2: anLevels = [99231]; break;
					case 3: anLevels = [99232]; break;
					case 4: anLevels = [99233]; break;
				}
			break;
			case 5:
				switch(nMDM){
					case 1: anLevels = [99251, 99252]; break;
					case 2: anLevels = [99253]; break;
					case 3: anLevels = [99254]; break;
					case 4: anLevels = [99255]; break;
				}
			break;
		}
		display_level();
	}
}
	
function compute_level_from_time(){
	if(nMinutes==0) return;
	switch(nEncounterType){
		case 0:
			if(nMinutes>=60) anLevels = [99205];
			else if(nMinutes>=45) anLevels = [99204]; 
			else if(nMinutes>=30) anLevels = [99203]; 
			else if(nMinutes>=10) anLevels = [99201, 99202];
		break;

		case 1:
			if(nMinutes>=40) anLevels = [99215];
			else if(nMinutes>=25) anLevels = [99214]; 
			else if(nMinutes>=15) anLevels = [99213]; 
			else if(nMinutes>=10) anLevels = [99212];
		break;
		
		case 2:
			if(nMinutes>=60) anLevels = [99244, 99245];
			else if(nMinutes>=40) anLevels = [99243]; 
			else if(nMinutes>=30) anLevels = [99242]; 
			else if(nMinutes>=15) anLevels = [99241];
			else anLevels = [0];
		break;
		
		case 3:
			if(nMinutes>=70) anLevels = [99223];
			else if(nMinutes>=50) anLevels = [99222]; 
			else if(nMinutes>=30) anLevels = [99221]; 
			else anLevels = [0];
		break;

		case 4:
			if(nMinutes>=35) anLevels = [99233];
			else if(nMinutes>=25) anLevels = [99232]; 
			else if(nMinutes>=15) anLevels = [99231]; 
			else anLevels = [0];
		break;
		
		case 5:
			if(nMinutes>=110) anLevels = [99255];
			else if(nMinutes>=80) anLevels = [99254]; 
			else if(nMinutes>=55) anLevels = [99253]; 
			else if(nMinutes>=40) anLevels = [99252];
			else if(nMinutes>=35) anLevels = [99251];
			else anLevels = [0];
		break;
	}
	display_level();
}

		
	
function display_level(){
	var sText;
	if(anLevels.length>1){
		sText = 'There are '+ nr2name(anLevels.length) +' possible E/M targets for the current selection:<br/><table cellspacing=10><tr><td style ="border:1px solid black; background-color: #E9F0FF" align="left">';
		sText += asTexts[anLevels[0]];
		for(var i = 1; i<anLevels.length; i++) sText += '</td></tr><tr><td style ="border:1px solid black; background-color: #E9F0FF" align="left">'+asTexts[anLevels[i]];
		sText += "</td></tr></table>";
	}
	else{
		if(anLevels[0]==0){
			sText = 'The current selection does not qualify for any CPT level';
		}
		else{
			sText = 'The following E/M target corresponds to the current selection:<br/><table cellspacing=10><tr><td style ="border:1px solid black; background-color: #E9F0FF" align="left">';
			sText += asTexts[anLevels[0]];
			sText += "</td></tr></table>";
		}
	}
	
	document.getElementById('_actual_cpt_text').innerHTML = sText;
	document.getElementById('cpt_row1').style.display = '';
	document.getElementById('cpt_row2').style.display = '';

}


function time_plus(){
	if(nMinutes<120) nMinutes+=5;
	document.getElementById('time_value').innerHTML=nMinutes+'-'+(nMinutes+4);
	compute_level_from_time();
}

function time_minus(){
	if(nMinutes>10) nMinutes-=5;
	document.getElementById('time_value').innerHTML=nMinutes+'-'+(nMinutes+4);
	compute_level_from_time();
}

function time_change(){
	var elSelect = document.getElementById('time_select'), bFirst;
	if(elSelect.options.length==22){
		elSelect.style.color = 'black';
		elSelect.remove(0);
		bFirst = true;
	}
	else bFirst = false;
	
	if(bFirst){
		document.getElementById('cpt_results').style.display='';
	}

	
	nMinutes = parseInt(elSelect.options[elSelect.selectedIndex].value);
	compute_level_from_time();
}
