﻿// JScript File
var questionHash=new UPSHashTable();
var answerHash=new UPSHashTable();
function showHideLoadingDiv(display)
{
    //debugger;
    if(loadingDiv!=null)
    {
        if(display)
        {
            loadingDiv.style.visibility="visible";
            loadingDiv.style.display="block";
        }
        else
        {
            loadingDiv.style.visibility=="hidden";
            loadingDiv.style.display="none";
        }
    }
}
function onLoadWindow()
{
    setTimeout(function () {TimedOnLoadWindow();},5);
}

function TimedOnLoadWindow()
{
    //Here call both ToggleQuestionVisibility, loadQuestions and loadAnswers functions
    //loadQuestions creates a hash of QuestionIDs and an arraylist of corressponding answerIDs for a QuestionID Key
    //loadAnswers creates a hash of AnswerIDs and its value.
    //debugger;
    showHideLoadingDiv(true);
    loadQuestions();
    loadAnswers();
    ToggleQuestionVisibility();
    showHideLoadingDiv(false);
}
function loadQuestions()
{
    //debugger;
    var answers;
    for (index = 0; index < m_PanelistQuestionIDs.length; index++)
    {
        var questionID=m_PanelistQuestionIDs[index];
        if(questionHash.containsKey(questionID))
        {
            answers=questionHash.get(questionID);
        }
        else
        {
            answers=new Array(0);
        }
        var answerID=m_PanelistAnswerIDs[index];
        answers.push(answerID);
        questionHash.put(questionID,answers);
    }
}
function loadAnswers()
{
   for (index = 0; index < m_PanelistAnswerIDs.length; index++)
   {
        var answerID=m_PanelistAnswerIDs[index];
        var answerValue=m_PanelistAnswerValues[index];
        answerHash.put(answerID,answerValue);
   } 
}

function ChangeAnswerValue(answerID,answerValue,questionID,doToggle)
{
   //Need to have anonymous function call to get over javascript passing of objects in setTimeout
   setTimeout(function () { TimedChangeAnswerValue(answerID,answerValue,questionID,doToggle); }, 5);
}
function TimedChangeAnswerValue(answerID,answerValue,questionID,doToggle)
{
    showHideLoadingDiv(true);
    //debugger;
    deleteQuestionFromArray(questionID);
    if(answerValue!='')//To ensure that if a non required text box is left empty it is not saved in to db.
    {
        addQuestionToArray(answerID,answerValue,questionID);
    }
    if(doToggle)
    {
        ToggleQuestionVisibility();
    }
    showHideLoadingDiv(false);
}
//Calls the TimedChangeAnswerValue function itself because the functionality is the same.
//In future if the saving of dates is to be handled differently then we can call a different function
//in the anonymous function.
function ChangeDateValue(answerID,answerValue,questionID,doToggle)
{
   //Need to have anonymous function call to get over javascript passing of objects in setTimeout
   setTimeout(function () { TimedChangeAnswerValue(answerID,answerValue,questionID,doToggle); }, 5);
}

function ChangeRadioButtonValue(answerID,questionID,doToggle)
{
   //Need to have anonymous function call to get over javascript passing of objects in setTimeout
   setTimeout(function () { TimedChangeRadioButtonValue(answerID,questionID,doToggle); }, 5); 
}
function TimedChangeRadioButtonValue(answerID,questionID,doToggle)
{
    showHideLoadingDiv(true);
    //debugger;
    deleteQuestionFromArray(questionID);
    addQuestionToArray(answerID,'',questionID);
    if(doToggle)
    {
        ToggleQuestionVisibility();
    }
    showHideLoadingDiv(false);
}
function ChangeCheckBoxAnswerValue(ClientID,answerID,answerValue,questionID,doToggle)
{
   //Need to have anonymous function call to get over javascript passing of objects in setTimeout
   setTimeout(function () { TimedChangeCheckBoxAnswerValue(ClientID,answerID,answerValue,questionID,doToggle); }, 5);
}
function TimedChangeCheckBoxAnswerValue(ClientID,answerID,answerValue,questionID,doToggle)
{
      showHideLoadingDiv(true);
      var chkBox = ClientID;
      if(chkBox.checked)
      {
        addQuestionToArray(answerID,answerValue,questionID);
      }
      else 
      {
        deleteCheckBoxQuestions(questionID,answerID);
      }

      if(doToggle)
      {
        ToggleQuestionVisibility();
      }
      showHideLoadingDiv(false);
}

function ChangeDropDownAnswerValue(ClientID,questionID,doToggle)
{
   //Need to have anonymous function call to get over javascript passing of objects in setTimeout
   setTimeout(function () { TimedChangeDropDownAnswerValue(ClientID,questionID,doToggle); }, 5);
}
function TimedChangeDropDownAnswerValue(ClientID,questionID,doToggle)
{
    showHideLoadingDiv(true);
    var answerID = ClientID.options[ClientID.options.selectedIndex].value;
    deleteQuestionFromArray(questionID);
    if(answerID!='-1')
    {
        addQuestionToArray(answerID,'',questionID);
    }
    if(doToggle)
    {
        ToggleQuestionVisibility();
    }
    showHideLoadingDiv(false);
}
function ChangeListAnswerValue(ClientID,questionID,doToggle)
{
   //Need to have anonymous function call to get over javascript passing of objects in setTimeout
   setTimeout(function () { TimedChangeListAnswerValue(ClientID,questionID,doToggle); }, 5);
}
function TimedChangeListAnswerValue(ClientID,questionID,doToggle)
{
    showHideLoadingDiv(true);
    deleteQuestionFromArray(questionID);
    var listControl = ClientID;
    for(var i = 0; i<listControl.options.length; i++)
    {
        if(listControl.options[i].selected)
        {
            var answerID = listControl.options[i].value;
            addQuestionToArray(answerID,'',questionID);
        }
    }
    if(doToggle)
    {
        ToggleQuestionVisibility();
    }
    showHideLoadingDiv(false);
}

function addQuestionToArray(answerID,answerValue,questionID)
{
    var answers;
    if(questionHash.containsKey(questionID))
    {
        answers=questionHash.get(questionID);
    }
    else
    {
        answers=new Array(0);
    }
    answers.push(answerID);
    questionHash.put(questionID,answers);
    answerHash.put(answerID,answerValue);
}

function deleteQuestionFromArray(questionID)
{
    var answers=questionHash.get(questionID);
    if(answers!=null && answers.length>0)
    {
        for(index=0;index<answers.length;index++)
        {
            answerHash.remove(answers[index]);
        }
    }
    questionHash.remove(questionID);
}

function deleteCheckBoxQuestions(questionID,answerID)
{
    var answers=questionHash.get(questionID);
    if(answers!=null && answers.length>0)
    {
        answerHash.remove(answerID);
        var answerIndex;
        for(index=0;index<answers.length;index++)
        {
            if(answerID==answers[index])
            {
                answerIndex=index;
                break;
            }
        }
        answers.splice(answerIndex,1);
        questionHash.put(questionID,answers);
    }
}
           
function IsAnswerIDExist(answerID)
{
  var returnValue = false;
  returnValue=answerHash.containsKey(answerID);
  return returnValue;
}
function ClearControlSelection(ctrlId)
{
    var doToggle=false;
    var ctrl=document.getElementById(ctrlId);
    if(ctrl!=null)
    {
        switch(ctrl.type)
        {
            case "select-multiple":
                if(ctrl.selectedIndex!=-1)
                {
                    ctrl.selectedIndex=-1;
                    ctrl.onchange();
                    doToggle=true;
                }
                
                break;
            case "select-one":
                if(ctrl.selectedIndex!=0)
                {
                    ctrl.selectedIndex=0;
                    ctrl.onchange();
                    doToggle=true;
                }
                break;
            case "text":
                if(ctrl.value!="")
                {
                    ctrl.value="";
                    doToggle=true;
                }
                break;
            case "password":
                if(ctrl.value!="")
                {
                    ctrl.value="";
                    doToggle=true;
                }
                break;
            case "checkbox":
                if(ctrl.checked)
                {
                    ctrl.checked=false;
                    ctrl.onclick();
                    doToggle=true;
                }
                break;
            case "radio":
                if(ctrl.checked)
                {
                    ctrl.checked=false;
                    ctrl.onclick();
                    doToggle=true;
                }
                break;                
            default:
                //alert(ctrl.type);
                break;
        }
    }
    return doToggle;
}
function ResetBrowserDisplay()
{
    if(document.all != null)
    {// IE Only. The below will cause IE to refresh the display. 
     // This is done as IE does not refresh the containing table, and causes a gap to appear 
     // when the smaller affirmations div is displayed and the profile div is  hidden.
        document.body.disabled = true;
        document.body.disabled = false;
    }
}
//Functions to stop copy paste for confirm question answers
function enableStopPage(obj)
{
    obj.onkeyup=stopPaste;
    obj.onkeydown=stopPaste;
}
function stopPaste(evt)
{
   if(!evt) evt = event;
	//To prevent Ctrl + V
	var ctrl = (typeof evt.modifiers == "undefined") ? evt.ctrlKey : evt.modifiers & evt.CONTROL_MASK;
	var v = (typeof evt.which == "undefined") ? evt.keyCode == 86 : evt.which == 86;
	//To Prevent SHIFT + Insert
    var shift=(typeof evt.modifiers == "undefined") ? evt.shiftKey : evt.modifiers & evt.CONTROL_MASK;
    var insert=(typeof evt.which == "undefined") ? evt.keyCode == 45 : evt.which == 45;
    
	// If the control and 'V' keys are pressed or if Shift Insert is pressed undo copy
	if ((ctrl && v)||(shift && insert ))
	{
		this.value = "";
		return false;
	}

	return true;
}