// The highest page number where back link was clicked.
var highestPageBackLinkClicked = 0;
//0-Others, 1-Back Link, 2-Forward Link
var clickType = 0;

function showPreviousQ(field) {
    if(curQ == 0) {
    alert("Already at beginning of form");
        return;
    }

    showHideQ(lastQ, curQ);
    
    prevQ = curQ;
    curQ = lastQ;
    lastQ = lastQ - 1;
    
    addHistory(curQ);
}

function updateProgressBar()
{
    if(curQ==0) {
       hide("backLink");
    } else {
    	show("backLink");
    }
    
    if (highestPageBackLinkClicked > curQ) {
 	   show("forwardLink");
    } else {
 	   hide("forwardLink");
    }

    updateDivProgressBar();    
    updateStepsProgressBar();
}

function showNextQ(field) {
  var isSubmitPage = true;
  
  // Click not from forward link
  if (clickType != 2) {
    resetForwardHistory();
  }
  if (window.qListGroups) {
    if (curQ < window.qListGroups.length) {
      var qListStringGroup = window.qListGroups[curQ];
      if (qListStringGroup) { 
        for (var i=0;i<qListStringGroup.length;++i) {
          //alert("check field: " + field.name + " for: " + qListStringGroup[i]);
          if(!validateGroupElement(qListStringGroup[i])) {
        	resetForwardHistory();
            return false;  
          }
        }
        if (curQ < window.qListGroups.length - 1) {
          prevQ = curQ;
          lastQ = curQ;
          curQ = curQ + 1;
             
          showHideQ(curQ, lastQ);
             
          addHistory(curQ);
          isSubmitPage = false;
        }
      } else {
        isSubmitPage = false;
      }
    }
  } else {
    if(field && !validate(field)) {
      resetForwardHistory();
      return false;
    }
      
    prevQ = curQ;
    lastQ = curQ;
    curQ++;

    if(curQ<qListString.length) {
      showHideQ(curQ, lastQ); 
      addHistory(curQ);
      isSubmitPage = false;
    }
  }
    
  // Click not from back and forward links
  if (clickType == 0) {
	  resetSigleFieldQuestion();
  }
  
  if (isSubmitPage) {
    finalize();
    submitForm();
  }
    
  return true;
}

function historyChange(newLocation, historyData) {
  if (window.dhtmlHistoryDisabled) {
    return;
  }
  
  //alert("history change: " + newLocation + " historyData: " + historyData + " curQ: " + curQ);
  var newL = null;
  
  try {
    if(isFinite(historyData)) {
      newL=parseInt(historyData);
      if (newL > curQ) { //going forward
        if (window.inReset) {//reset function was called
          //alert("reset");
          var length4CurQ = qListString.length;
          if (window.qListGroups) {
            length4CurQ = window.qListGroups.length;
          }
        
          isAddHistory = false;  
          clickType = 2;
          var tempCurQ = curQ;
          while (curQ < newL && curQ < length4CurQ) {
            displayNextQ(window.document.form1.Submit);
            if (curQ <= tempCurQ) { //if for some reason we don't increase curQ
              tempCurQ = curQ;
              curQ++;
            }
          }
        } else {
          //alert("going forward");
          if (curQ < newL && curQ < highestPageBackLinkClicked) {
        	clickType = 2;
        	displayNextQ(getSingleFieldQuestion()); 
          }
        }
      } else {//going back
        //alert("going back 1");
    	clickType = 1;
    	setHighestPageBackLinkClicked();
        while (curQ > newL && curQ >0) {
          displayPreviousQ();
        }
      }
    }
  
    if (null == newL || isNaN(newL)) {//going back
      clickType = 1;
      setHighestPageBackLinkClicked();
      while (curQ > 0) {
        //alert("going back 2");
        displayPreviousQ();
      }
    }
  } finally {
	clickType = 0;
    isAddHistory = true;
    window.inReset = false;
  }
}

/*
 * Set highest page number where back link was clicked.
 */
function setHighestPageBackLinkClicked() {
	if (curQ > highestPageBackLinkClicked) {
		highestPageBackLinkClicked = curQ;
	}
}

function resetForwardHistory() {
	if (highestPageBackLinkClicked) {
    	highestPageBackLinkClicked = 0;
    	updateProgressBar();
    }
}

/*
 * Reset only value of single field question for:
 * 1. Non-grouped questions
 * 2. grouped with single question
 */
function resetSigleFieldQuestion() {
	if (!window.qListGroups || window.qListGroups[curQ].length == 1) {
		
		var divId;
		if(window.qListGroups) {
			divId = window.qListGroups[curQ];
		}
		else if(qListString){
			divId = qListString[curQ];
		}
		
	    if(divId == 'div_DDI_AGE') {
	        window.document.form1.DDI_AGE_01.options[0].selected = true;
	    } else if(divId == 'div_DDI_GRADYEAR') {
	        window.document.form1.DDI_GRADYEAR_01.options[0].selected = true;
	    } else if(divId == 'div_DDI_EDUCATION_01') {
	        window.document.form1.DDI_EDUCATION_01.options[0].selected = true;
	    } else if(divId == 'div_DDI_START_PERIOD_01') {
	        window.document.form1.DDI_START_PERIOD_01.options[0].selected = true;
	    } else if(divId == 'div_DDI_EARN_YEARLY_01') {
	        window.document.form1.DDI_EARN_YEARLY_01.options[0].selected = true;
	    } else if(divId == 'div_COUNTRY_01') {
	        window.document.form1.COUNTRY_01[0].checked = false;
	        window.document.form1.COUNTRY_01[1].checked = false;
	        window.document.form1.COUNTRY_01[2].checked = false;
	    } else if(divId == 'div_USCITIZEN_01') {
	        window.document.form1.USCITIZEN_01[0].checked = false;
	        window.document.form1.USCITIZEN_01[1].checked = false;
	        hide("div_COUNTRY_01");
	        window.document.form1.COUNTRY_01[0].checked = false;
	        window.document.form1.COUNTRY_01[1].checked = false;
	        window.document.form1.COUNTRY_01[2].checked = false;
	    } else if(divId == 'div_DDI_MILITARYBRANCH_01') {
	    	window.document.form1.DDI_MILITARYAFFILIATE_01[0].checked = false;
	    	window.document.form1.DDI_MILITARYAFFILIATE_01[1].checked = false;
	        window.document.form1.DDI_MILITARYBRANCH_01.options[0].selected = true;
	        hide('div_DDI_MILITARYBRANCH_01_options');
	    } else if(divId == 'div_DDI_CREDIT_01') {
	        window.document.form1.DDI_CREDIT_01.options[0].selected = true;
	    } else if(divId == 'div_DDI_MOTIVATIONAL_01') {
	        window.document.form1.DDI_MOTIVATIONAL_01.options[0].selected = true;
	    } 
	}
}
    
function getSingleFieldQuestion() {
	if (!window.qListGroups || window.qListGroups[curQ].length == 1) {

		var divId;
		if(window.qListGroups) {
			divId = window.qListGroups[curQ];
		}
		else if(qListString){
			divId = qListString[curQ];
		}

		if (divId == 'div_DDI_AGE') {
			return window.document.form1.DDI_AGE_01;
		} else if (divId == 'div_DDI_GRADYEAR') {
			return window.document.form1.DDI_GRADYEAR_01;
		} else if (divId == 'div_DDI_EDUCATION_01') {
			return window.document.form1.DDI_EDUCATION_01;
		} else if (divId == 'div_DDI_START_PERIOD_01') {
			return window.document.form1.DDI_START_PERIOD_01;
		} else if (divId == 'div_DDI_EARN_YEARLY_01') {
			return window.document.form1.DDI_EARN_YEARLY_01;
		} else if (divId == 'div_COUNTRY_01') {
			return window.document.form1.COUNTRY_01;
		} else if (divId == 'div_USCITIZEN_01') {
			return window.document.form1.USCITIZEN_01;
		} else if (divId == 'div_DDI_MILITARYBRANCH_01') {
			if (window.document.form1.DDI_MILITARYAFFILIATE_01[0].checked == true) {
				return window.document.form1.DDI_MILITARYBRANCH_01;
			} else {
				return window.document.form1.DDI_MILITARYAFFILIATE_01;
			}
		} else if (divId == 'div_ZIP_01') {
			if(isEmailVisible()) {
				return window.document.form1.EMAIL_01; 
			} else {
				return window.document.form1.ZIP_01;
			}
		} else if (divId == 'div_DDI_AOS') {
			return window.document.form1.DDI_AOS_01;
		} else if (divId == 'div_DDI_DEGREELEVEL_01') {
            return window.document.form1.DDI_DEGREELEVEL_01;
		} else if (divId == 'div_DDI_CREDIT_01') {
            return window.document.form1.DDI_CREDIT_01;
        } else if (divId == 'div_DDI_MOTIVATIONAL_01') {
            return window.document.form1.DDI_MOTIVATIONAL_01;
        } 
	} else {
		return null;
	}
}
