﻿var rowRelationTemplate;

// JScript File
var relativesList;
var relativesRowNumber=0;
var relativesEdit = false;
relativesList = new relativesListContainer();

//Sets the columns for onchange event
function setupRelativesList(){
    relativesList.setup();
}

// Main function used for Relatives
function relativesListContainer() {
    var selectedRow;
    var templateRow;
    var removedRow;

    //Sets relatives columns for onchange event
    this.setup = function() {
        for (var i = 0; i < document.forms[0].elements.length; i++) {
        var setupColumn = document.forms[0].elements[i];
        if ((setupColumn.id.indexOf("RelativePrefixDropDownList") > -1) ||
        (setupColumn.id.indexOf("RelativeFirstNameTextBox") > -1) ||
        (setupColumn.id.indexOf("RelativeLastNameTextBox") > -1) ||
        (setupColumn.id.indexOf("RelativeSuffixDropDownList") > -1) ||
        (setupColumn.id.indexOf("RelativeTypeDropDownList") > -1) ||
        (setupColumn.id.indexOf("RelativeAttendedInstitutionCheckBox") > -1))
        setupColumn.onchange = this.updateSelectedRow;
        }
    }
    //function used for updating the selected row in the panel
    this.updateSelectedRow = function() {
        var rows = document.getElementById('relativeTable').rows;
        if (rows.length == 0) relativesList.addNewRow();
        relativesEdit = true;
        relativesList.updatePanelRow();
    }

    //function used for selecting the row in the panel
    this.selectRow = function(row) {
        if (row == removedRow) return;
        if (selectedRow) {
            selectedRow.className = null;
        }
        row.className = 'selectedrow';
        selectedRow = row;
        var rows = document.getElementById('relativeTable').rows;
        if ((rows.length >= 1) && (relativesEdit == false)) relativesList.updateFormFields();
    }
    //function used for deleting the row in the panel
    this.removeRow = function(row) {
        row.parentNode.removeChild(row);
        removedRow = row;
        relativesRowNumber--;
        if (relativesRowNumber >= 1) {// there is only one row in the table
            relativesEdit = false;
            this.selectRow(document.getElementById('relativeTable').rows[relativesRowNumber -1]);
        }
        if (relativesRowNumber == 0) {
            selectedRow = null;
            relativesList.updateFormFields();
        }
    }
    
    //function used for adding a row in the panel using add relative link
    this.addRelativesRow = function() {
        if (!templateRow) return;
        //get the row that has any invalid data
        var relationtable = document.getElementById('relativeTable');
        if (!relationtable) return;
        for (var tableRow = 0; tableRow < relationtable.rows.length; tableRow++) {
            var relationRow = relationtable.rows[tableRow];
            relativesEdit = false;
            this.selectRow(relationRow);
            if (!Page_ClientValidate("NewApplicationRelative")) return;
        }
        if (!Page_ClientValidate("NewApplicationRelative")) return;
         var newRow = templateRow.cloneNode(true);
         newRow.onclick = function() { relativesEdit = false; relativesList.selectRow(this); }
         var removeRelativeLink = newRow.getElementsByTagName('a');
         removeRelativeLink[0].setAttribute('href', 'javascript:void(0);');
         removeRelativeLink[0].onclick = function() { relativesList.removeRow(this.parentNode.parentNode); }
         document.getElementById('relativeTable').appendChild(newRow);
         relativesEdit = false;
         this.selectRow(newRow);
         relativesRowNumber++;
    }
    //function used for template row                
    this.addNewRow = function() {
        var tableId = document.getElementById("relativeTable");
        var newRelativeRow = document.getElementById(tableId.id).insertRow(-1);
        newRelativeRow.id = "newRelativeRow" + relativesRowNumber;
        newRelativeRow.onclick = function() { relativesEdit = false; relativesList.selectRow(this); }
        var newRelativeCel = newRelativeRow.insertCell(0);
        newRelativeCel.innerHTML = newRelativeCel.innerHTML + "<td style='width: 100%'>" + "<span id = 'RelativePrefixSpan" + eval(relativesRowNumber) + "'  style='display:none'></span>";
        newRelativeCel.innerHTML = newRelativeCel.innerHTML + "<span id = 'RelativeFirstNameSpan" + eval(relativesRowNumber) + "'  class = 'boldText'></span>";
        newRelativeCel.innerHTML = newRelativeCel.innerHTML + "<span id = 'RelativeLastNameSpan" + eval(relativesRowNumber) + "'  class = 'boldText'></span>";
        newRelativeCel.innerHTML = newRelativeCel.innerHTML + "<span id = 'RelativeSuffixSpan" + eval(relativesRowNumber) + "'  style='display:none' ></span>";
        newRelativeCel.innerHTML = newRelativeCel.innerHTML + "<span id = 'RelativeTypeSpan" + eval(relativesRowNumber) + "'  style='display:none' class = 'boldText'></span></br>";
        newRelativeCel.innerHTML = newRelativeCel.innerHTML + "<span id = 'RelativeTypeDisplaySpan" + eval(relativesRowNumber) + "' ></span>";
        newRelativeCel.innerHTML = newRelativeCel.innerHTML + "<span id = 'RelativeAttendedInstitutionSpan" + eval(relativesRowNumber) + "' style='display:none'></span></td>";
        newRelativeCel = newRelativeRow.insertCell(1);
        var removeRelativeImg = document.createElement('img');
        removeRelativeImg.src = ResourceManager.GetString("JsDeleteRelativeImageResource");
        removeRelativeImg.alt = ResourceManager.GetString("JsDeleteRelativeImageAlternateTextResource");
        removeRelativeImg.border = 0;
        var removeRelativeLink = document.createElement('a');
        removeRelativeLink.setAttribute('href', 'javascript:void(0);');
        removeRelativeLink.onclick = function() { relativesList.removeRow(this.parentNode.parentNode); }
        removeRelativeLink.appendChild(removeRelativeImg);
        newRelativeCel.appendChild(removeRelativeLink);
        templateRow = newRelativeRow.cloneNode(true);
        relativesRowNumber++;
        relativesEdit = true;
        this.selectRow(newRelativeRow);

    }
    //Function used for updating the panel row
    this.updatePanelRow = function() {
        var spans = selectedRow.getElementsByTagName("span");
        var relativePrefixDropDown, relativeSuffixDropDown, relativeFirstNameTextBox, relativeLastNameTextBox;
        var relativeTypeDisplay;
        var relativeTypeDropDown, relativeAttendedInstitutionCheckBox;
        // get all the values  
        for (var i = 0; i < document.forms[0].elements.length; i++) {
            var relativeColumn = document.forms[0].elements[i];
            if (relativeColumn.id.indexOf("RelativePrefixDropDownList") > -1)
                relativePrefixDropDown = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeSuffixDropDownList") > -1)
                relativeSuffixDropDown = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeFirstNameTextBox") > -1)
                relativeFirstNameTextBox = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeLastNameTextBox") > -1)
                relativeLastNameTextBox = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeTypeDropDownList") > -1)
                relativeTypeDropDown = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeAttendedInstitutionCheckBox") > -1)
                relativeAttendedInstitutionCheckBox = document.getElementById(relativeColumn.id);
        }
        for (var j = 0; j < spans.length; j++) {
            var relativeSpan = spans[j];
            if (relativeSpan.id.indexOf("RelativePrefixSpan") > -1) {
                if ((relativePrefixDropDown == undefined) ? false : (relativePrefixDropDown.value != null))
                    relativeSpan.innerHTML = relativePrefixDropDown.value;
            }
            if (relativeSpan.id.indexOf("RelativeSuffixSpan") > -1) {
                if ((relativeSuffixDropDown == undefined) ? false : (relativeSuffixDropDown.value != null))
                    relativeSpan.innerHTML = relativeSuffixDropDown.value;
            }
            if (relativeSpan.id.indexOf("RelativeFirstNameSpan") > -1) {
                if ((relativeFirstNameTextBox == undefined) ? false : (relativeFirstNameTextBox.value != null))
                    relativeSpan.innerHTML = relativeFirstNameTextBox.value + " ";
            }
            if (relativeSpan.id.indexOf("RelativeLastNameSpan") > -1) {
                if ((relativeLastNameTextBox == undefined) ? false : (relativeLastNameTextBox.value != null))
                    relativeSpan.innerHTML = relativeLastNameTextBox.value;
            }
            if (relativeSpan.id.indexOf("RelativeTypeSpan") > -1) {
                if ((relativeTypeDropDown == undefined) ? false : (relativeTypeDropDown.value != null))
                    relativeSpan.innerHTML = relativeTypeDropDown.value;
            }

            if (relativeSpan.id.indexOf("RelativeTypeDisplaySpan") > -1) {
                if ((relativeTypeDropDown == undefined) ? false : (relativeTypeDropDown.value != null)) {
                    var displayText = findSelectedText(relativeTypeDropDown);
                    if (displayText) relativeSpan.innerHTML = displayText;
                }

            }
            if (relativeSpan.id.indexOf("RelativeAttendedInstitutionSpan") > -1) {
                if ((relativeAttendedInstitutionCheckBox == undefined) ? false : (relativeAttendedInstitutionCheckBox.value != null))
                    relativeSpan.innerHTML = relativeAttendedInstitutionCheckBox.checked ? 1 : 0;
            }
        }
    }


    //Function used for saving the relation table
    this.saveRelationTable = function() {
        var relativePrefixHiddenField, relativeFirstNameHiddenField, relativeLastNameHiddenField;
        var relativeSuffixHiddenField, relativeTypeHiddenField, relativeTypeDescHiddenField, relativeAttendedInstitutionHiddenField;

        for (var i = 0; i < document.forms[0].elements.length; i++) {
            var element = document.forms[0].elements[i];
            if (element.id.indexOf("RelativePrefixHiddenField") > -1)
                relativePrefixHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeFirstNameHiddenField") > -1)
                relativeFirstNameHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeLastNameHiddenField") > -1)
                relativeLastNameHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeSuffixHiddenField") > -1)
                relativeSuffixHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeTypeHiddenField") > -1)
                relativeTypeHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeTypeDescHiddenField") > -1)
                relativeTypeDescHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeAttendedInstitutionHiddenField") > -1)
                relativeAttendedInstitutionHiddenField = document.getElementById(element.id);

        }
        //Initialize the hidden field's value
        if (relativePrefixHiddenField) relativePrefixHiddenField.value = "";
        if (relativeFirstNameHiddenField) relativeFirstNameHiddenField.value = "";
        if (relativeLastNameHiddenField) relativeLastNameHiddenField.value = "";
        if (relativeSuffixHiddenField) relativeSuffixHiddenField.value = "";
        if (relativeTypeHiddenField) relativeTypeHiddenField.value = "";
        if (relativeTypeDescHiddenField) relativeTypeDescHiddenField.value = "";
        if (relativeAttendedInstitutionHiddenField) relativeAttendedInstitutionHiddenField.value = "";

        var table = document.getElementById('relativeTable');
        var concatChar = '';

        if (!table) return;
        for (var i = 0; i < table.rows.length; i++) {
            var spans = table.rows[i].getElementsByTagName("span");
            if (i > 0) concatChar = '|';

            relativePrefixHiddenField.value = relativePrefixHiddenField.value + concatChar + spans[0].innerHTML;
            relativeFirstNameHiddenField.value = relativeFirstNameHiddenField.value + concatChar + spans[1].innerHTML;
            relativeLastNameHiddenField.value = relativeLastNameHiddenField.value + concatChar + spans[2].innerHTML;
            relativeSuffixHiddenField.value = relativeSuffixHiddenField.value + concatChar + spans[3].innerHTML;
            relativeTypeHiddenField.value = relativeTypeHiddenField.value + concatChar + spans[4].innerHTML;
            relativeTypeDescHiddenField.value = relativeTypeDescHiddenField.value + concatChar + spans[5].innerHTML;
            relativeAttendedInstitutionHiddenField.value = relativeAttendedInstitutionHiddenField.value + concatChar + spans[6].innerHTML;
        }
    }

    //Function used to fill the application relatives panel for saved appl
    this.fillRelativePanel = function() {
        var relativePrefixHiddenField, relativeFirstNameHiddenField, relativeMiddleNameHiddenField, relativeLastNameHiddenField;
        var relativeSuffixHiddenField, relativeTypeHiddenField, relativeTypeDescHiddenField, relativeAttendedInstitutionHiddenField;
        for (var i = 0; i < document.forms[0].elements.length; i++) {
            var element = document.forms[0].elements[i];
            if (element.id.indexOf("RelativePrefixHiddenField") > -1)
                relativePrefixHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeFirstNameHiddenField") > -1)
                relativeFirstNameHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeLastNameHiddenField") > -1)
                relativeLastNameHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeSuffixHiddenField") > -1)
                relativeSuffixHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeTypeHiddenField") > -1)
                relativeTypeHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeTypeDescHiddenField") > -1)
                relativeTypeDescHiddenField = document.getElementById(element.id);

            if (element.id.indexOf("RelativeAttendedInstitutionHiddenField") > -1)
                relativeAttendedInstitutionHiddenField = document.getElementById(element.id);
        }
        if ((!relativePrefixHiddenField) || (!relativeFirstNameHiddenField) ||
            (!relativeLastNameHiddenField) || (!relativeTypeHiddenField) || (!relativeSuffixHiddenField) ||
            (!relativeAttendedInstitutionHiddenField) || (!relativeTypeHiddenField)) return;

        var prefix, suffix, firstName, middleName, lastName, relativeType, relativeTypeDesc, attendedInstitution;
        //Get the prefix, suffix and other columns from the hidden field.
        if (relativePrefixHiddenField.value != null)
            prefix = relativePrefixHiddenField.value.split('|');
        if (relativeFirstNameHiddenField.value != null)
            firstName = relativeFirstNameHiddenField.value.split('|');
        if (relativeLastNameHiddenField.value != null)
            lastName = relativeLastNameHiddenField.value.split('|');
        if (relativeSuffixHiddenField.value != null)
            suffix = relativeSuffixHiddenField.value.split('|');
        if (relativeTypeHiddenField.value != null)
            relativeType = relativeTypeHiddenField.value.split('|');
        if (relativeTypeDescHiddenField.value != null)
            relativeTypeDesc = relativeTypeDescHiddenField.value.split('|');
        if (relativeAttendedInstitutionHiddenField.value != null)
            attendedInstitution = relativeAttendedInstitutionHiddenField.value.split('|');

        if (relativeFirstNameHiddenField.value == "") return;
        for (var i = 0; i < prefix.length; i++) {
            this.addNewRow();
            var spans = selectedRow.getElementsByTagName("span");
            spans[0].innerHTML = prefix[i];
            spans[1].innerHTML = firstName[i];
            spans[2].innerHTML = lastName[i];
            spans[3].innerHTML = suffix[i];
            spans[4].innerHTML = relativeType[i];
            spans[5].innerHTML = relativeTypeDesc[i];
            spans[6].innerHTML = attendedInstitution[i];
        }
        if (document.getElementById('relativeTable').rows.length > 0) {
            relativesEdit = false;
            relativesList.selectRow(document.getElementById('relativeTable').rows[0]);
        }
    }
 
    //Update the form fields when the row selected on the panel
    this.updateFormFields = function() {
        var relativePrefixDropDown, relativeSuffixDropDown, relativeFirstNameTextBox, relativeLastNameTextBox;
        var relativeTypeDropDown, relativeAttendedInstitutionCheckBox;
        for (var j = 0; j < document.forms[0].elements.length; j++) {
            var relativeColumn = document.forms[0].elements[j];
            if (relativeColumn.id.indexOf("RelativePrefixDropDownList") > -1)
                relativePrefixDropDown = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeSuffixDropDownList") > -1)
                relativeSuffixDropDown = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeFirstNameTextBox") > -1)
                relativeFirstNameTextBox = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeLastNameTextBox") > -1)
                relativeLastNameTextBox = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeTypeDropDownList") > -1)
                relativeTypeDropDown = document.getElementById(relativeColumn.id);
            if (relativeColumn.id.indexOf("RelativeAttendedInstitutionCheckBox") > -1)
                relativeAttendedInstitutionCheckBox = document.getElementById(relativeColumn.id);
        }
        if (!selectedRow) {
            if (relativePrefixDropDown) relativePrefixDropDown.value = "";
            if (relativeSuffixDropDown) relativeSuffixDropDown.value = "";
            if (relativeFirstNameTextBox) relativeFirstNameTextBox.value = "";
            if (relativeLastNameTextBox) relativeLastNameTextBox.value = "";
            if (relativeTypeDropDown) relativeTypeDropDown.value = "";
            if (relativeAttendedInstitutionCheckBox) relativeAttendedInstitutionCheckBox.value = "";
        }
        else {
            var spans = selectedRow.getElementsByTagName("span");
            for (var k = 0; k < spans.length; k++) {
                var relativeSpan = spans[k];
                if (relativeSpan.id.indexOf("RelativePrefixSpan") > -1) {
                    if ((relativePrefixDropDown == undefined) ? false : (relativePrefixDropDown.value != null))
                        relativePrefixDropDown.value = relativeSpan.innerHTML;
                }
                if (relativeSpan.id.indexOf("RelativeSuffixSpan") > -1) {
                    if ((relativeSuffixDropDown == undefined) ? false : (relativeSuffixDropDown.value != null))
                        relativeSuffixDropDown.value = relativeSpan.innerHTML;
                }
                if (relativeSpan.id.indexOf("RelativeFirstNameSpan") > -1) {
                    if ((relativeFirstNameTextBox == undefined) ? false : (relativeFirstNameTextBox.value != null))
                        relativeFirstNameTextBox.value = relativeSpan.innerHTML;
                }
              
                if (relativeSpan.id.indexOf("RelativeLastNameSpan") > -1) {
                    if ((relativeLastNameTextBox == undefined) ? false : (relativeLastNameTextBox.value != null))
                        relativeLastNameTextBox.value = relativeSpan.innerHTML;
                }
                if (relativeSpan.id.indexOf("RelativeTypeSpan") > -1) {
                    if ((relativeTypeDropDown == undefined) ? false : (relativeTypeDropDown.value != null))
                        relativeTypeDropDown.value = relativeSpan.innerHTML;
                }
                if (relativeSpan.id.indexOf("RelativeAttendedInstitutionSpan") > -1) {
                    if ((relativeAttendedInstitutionCheckBox == undefined) ? false : (relativeAttendedInstitutionCheckBox.value != null)) {
                        if (relativeSpan.innerHTML == 1) relativeAttendedInstitutionCheckBox.checked = true;
                        else relativeAttendedInstitutionCheckBox.checked = false;
                    }
                }
            }
        }
    }
}
