﻿// JScript File
var controlsEditActivity;
var controlsAddActivity;
var activityList = new activityListContainer();

function initializeActivityLists() {
    activityList.initialize();
}

function activity(ActivityType, Activity, ActivityPosition, ActivityHours, ActivityWeeks, ActivityYears, ActivityGrade9,
		ActivityGrade10, ActivityGrade11, ActivityGrade12, ActivityPostsecondary) {
    this.ActivityType = ActivityType;
    this.Activity = Activity;
    this.Position = ActivityPosition;
    this.HoursPerWeek = ActivityHours;
    this.WeeksPerYear = ActivityWeeks;
    this.NumberOfYears = ActivityYears;
    this.ParticipatedGrade09 = ActivityGrade9;
    this.ParticipatedGrade10 = ActivityGrade10;
    this.ParticipatedGrade11 = ActivityGrade11;
    this.ParticipatedGrade12 = ActivityGrade12;
    this.ParticipatedPostsecondary = ActivityPostsecondary;
}

function activityText(ActivityTypeText, ActivityText, ActivityPositionText) {
    this.ActivityTypeText = ActivityTypeText;
    this.ActivityText = ActivityText;
    this.ActivityPositionText = ActivityPositionText;
}

function controlActivityList(ActivityType, Activity, ActivityPosition, ActivityHours, ActivityWeeks, ActivityYears, ActivityGrade9,
		ActivityGrade10, ActivityGrade11, ActivityGrade12, ActivityPostsecondary, ActivitiesHiddenField, BuildingHandlerHiddenField,
		ApplicationFormHiddenField, ActivitiesTextHiddenField, ActivityIndexSelectedRowHiddenField, ActivityIdHiddenField) {
    this.ActivityType = ActivityType;
    this.Activity = Activity;
    this.ActivityPosition = ActivityPosition;
    this.ActivityHours = ActivityHours;
    this.ActivityWeeks = ActivityWeeks;
    this.ActivityYears = ActivityYears;
    this.ActivityGrade9 = ActivityGrade9;
    this.ActivityGrade10 = ActivityGrade10;
    this.ActivityGrade11 = ActivityGrade11;
    this.ActivityGrade12 = ActivityGrade12;
    this.ActivityPostsecondary = ActivityPostsecondary;
    this.ActivitiesHiddenField = ActivitiesHiddenField;
    this.BuildingHandlerHiddenField = BuildingHandlerHiddenField;
    this.ApplicationFormHiddenField = ApplicationFormHiddenField;
    this.ActivitiesTextHiddenField = ActivitiesTextHiddenField;
    this.ActivityIndexSelectedRowHiddenField = ActivityIndexSelectedRowHiddenField;
    this.ActivityIdHiddenField = ActivityIdHiddenField;
}

function GetActivityObject(indexObject, activitiesHiddenField) {
    var actualActivity;
    if ($("#" + activitiesHiddenField).val() != "" && $("#" + activitiesHiddenField).val() != undefined)
        actualActivity = JSON.parse($("#" + activitiesHiddenField).val());
        
    if (actualActivity != undefined)
        return actualActivity[indexObject];
}

function SetActivityDropDownValueToHidden( ActivityField, ActivityIdHidden) {
    var activityValue = $("#" + ActivityField).val();
    $("#" + ActivityIdHidden).val(activityValue);
}

function activityListContainer() {

    var selectedRow;
    var templateRow;
    var removedRow;

    this.initialize = function() {

        var actualActivity = this.GetAllActivityObject(controlsAddActivity.ActivitiesHiddenField);

        if (actualActivity.length != 0 || actualActivity.length != undefined) {

            var listOldActivityText = this.AddActivityTextObject(new activityText("", "", ""), controlsAddActivity.ActivitiesTextHiddenField);
            this.BuildActivityTable(actualActivity, controlsAddActivity.ActivitiesHiddenField, listOldActivityText);
        }

        this.selectRow($("#activityTable").find("tr:first"), false);

        $("#" + controlsAddActivity.Activity).change(this.updateSelectedRow);
        $("#" + controlsAddActivity.ActivityPosition).change(this.updateSelectedRow);
    }

    this.selectRow = function(row, isEdit) {
        var isValidControl = true;

        if (isEdit == true) {
            isValidControl = Page_ClientValidate("NewApplicationActivity");
            if (isValidControl == true) {
                var oldIndexObject = $("#activityTable").find("tr[class=selectedrow]").attr("indexId");
                var oldActivityObject = this.GetActivityObjectFromPanel(controlsAddActivity);
                var oldActivityTextObject = this.GetActivityTextObjectFromPanel(controlsAddActivity);
                this.EditActivityObject(oldIndexObject, controlsAddActivity.ActivitiesHiddenField,
					controlsAddActivity.ActivitiesTextHiddenField, oldActivityObject, oldActivityTextObject);
            }
        }
        if (isValidControl == true) {
            $(row).parent().find("tr").attr("class", "");
            $(row).attr("class", "selectedrow")

            var newIndexObject = $(row).attr("indexId");
            if (newIndexObject != undefined) {
                var activityObject = GetActivityObject(newIndexObject, controlsAddActivity.ActivitiesHiddenField);
                FillActivityPanel(activityObject, controlsAddActivity);
                $("#" + controlsAddActivity.ActivityIndexSelectedRowHiddenField).val(newIndexObject);
            }
        }
    }

    this.selectRowFromRow = function(row, isEdit) {
        $(row).parent().find("tr").attr("class", "");
        $(row).attr("class", "selectedrow")
        var selectedRow = $("#activityTable").find("tr[class=selectedrow]");
        updateRow(selectedRow);
    }

    this.GetActivityObjectFromPanel = function(targetControlActivity) {
        var activityObject = new activity(0, 0, 0, 0, 0, 0, false, false, false, false, false);
        activityObject.ActivityType = parseInt($("#" + targetControlActivity.ActivityType).val());
        activityObject.Activity = parseInt($("#" + targetControlActivity.Activity).val());
        activityObject.Position = parseInt($("#" + targetControlActivity.ActivityPosition).val());
        var tempHoursPerWeek = parseFloat($("#" + targetControlActivity.ActivityHours).val());
        if (isNaN(tempHoursPerWeek)) tempHoursPerWeek = 0;
        activityObject.HoursPerWeek = tempHoursPerWeek
        activityObject.WeeksPerYear = parseInt($("#" + targetControlActivity.ActivityWeeks).val());
        activityObject.NumberOfYears = parseInt($("#" + targetControlActivity.ActivityYears).val());
        activityObject.ParticipatedGrade09 = $("#" + targetControlActivity.ActivityGrade9).attr('checked');
        activityObject.ParticipatedGrade10 = $("#" + targetControlActivity.ActivityGrade10).attr('checked');
        activityObject.ParticipatedGrade11 = $("#" + targetControlActivity.ActivityGrade11).attr('checked');
        activityObject.ParticipatedGrade12 = $("#" + targetControlActivity.ActivityGrade12).attr('checked');
        activityObject.ParticipatedPostsecondary = $("#" + targetControlActivity.ActivityPostsecondary).attr('checked');

        return activityObject;
    }

    this.GetActivityTextObjectFromPanel = function(targetControlActivity) {
        var activityTextObject = new activityText("", "", "");
        activityTextObject.ActivityTypeText = $("#" + targetControlActivity.ActivityType).find('option').filter(':selected').text();
        activityTextObject.ActivityText = $("#" + targetControlActivity.Activity).find('option').filter(':selected').text();
        activityTextObject.ActivityPositionText = $("#" + targetControlActivity.ActivityPosition).find('option').filter(':selected').text();
        return activityTextObject;
    }

    this.StoreCurentObject = function() {
        var selectedActivityIndex = $("#activityTable").find("tr[class=selectedrow]").attr("indexId");
        var currentActivityObject = this.GetActivityObjectFromPanel(controlsAddActivity);
        var currentActivityTextObject = this.GetActivityTextObjectFromPanel(controlsAddActivity);
        this.EditActivityObject(selectedActivityIndex, controlsAddActivity.ActivitiesHiddenField,
			controlsAddActivity.ActivitiesTextHiddenField, currentActivityObject, currentActivityTextObject);
    }

    this.AddNewRow = function() {
        if (Page_ClientValidate("NewApplicationActivity")) {
            var actualSelectedActivityIndex = $("#activityTable").find("tr[class=selectedrow]").attr("indexId");
            if (actualSelectedActivityIndex == undefined) actualSelectedActivityIndex = 0;
            var currentActivityObject = this.GetActivityObjectFromPanel(controlsAddActivity);
            var currentActivityTextObject = this.GetActivityTextObjectFromPanel(controlsAddActivity);
            this.EditActivityObject(actualSelectedActivityIndex, controlsAddActivity.ActivitiesHiddenField,
                controlsAddActivity.ActivitiesTextHiddenField, currentActivityObject, currentActivityTextObject);
            var allActivityObjects = this.AddActivityObject(new activity(0, 0, 0, 0, 0, 0, false, false, false, false, false),
                controlsAddActivity.ActivitiesHiddenField);
            var allActivityTextObjects = this.AddActivityTextObject(new activityText("", "", ""), controlsAddActivity.ActivitiesTextHiddenField);
            this.BuildActivityTable(allActivityObjects, controlsAddActivity.ActivitiesHiddenField, allActivityTextObjects);
            FillActivityPanel(new activity(0, 0, 0, 0, 0, 0, false, false, false, false, false), controlsAddActivity);
            this.selectRow($("#activityTable").find("tr:last"), false);
        }
    }

    this.EditActivityObject = function(indexObject, activityHiddenField, activityTextHiddenField, newActivityObject, newActivityTextObject) {
        var actualActivity, actualTextActivity;
        if ($("#" + activityHiddenField).val() != "" && $("#" + activityHiddenField).val() != undefined) 
            actualActivity = JSON.parse($("#" + activityHiddenField).val());
            
        if(actualActivity != undefined) {
            actualActivity[indexObject] = newActivityObject;
            $("#" + activityHiddenField).val(JSON.stringify(actualActivity));
        }        
        
        if ($("#" + activityTextHiddenField).val() != "" && $("#" + activityTextHiddenField).val() != undefined) 
            actualTextActivity = JSON.parse($("#" + activityTextHiddenField).val());
         
        if (actualTextActivity != undefined) {
            actualTextActivity[indexObject] = newActivityTextObject;
            $("#" + activityTextHiddenField).val(JSON.stringify(actualTextActivity));
        }
    }

    this.BuildActivityTable = function(arrayActivity, activityHiddenField, arrayActivityText) {

        $("#activityTable").empty();

        var removeButton = "";
        for (var i = 0; i <= (arrayActivity.length - 1); i = i + 1) {
            removeButton = "<a name='removeButton' href='javascript:void(0);return false;'><img height='18' src='../App_Themes/Default/Images/icon_delete_x.gif' width='18' border='0' /></a>";

            $("#activityTable").append(
				"<tr indexId='" + i + "'>" +
					"<td style='width: 100%'>" +
						"<span style='font-weight:bold' >" + arrayActivityText[i].ActivityText + " </span><span>" +
							arrayActivityText[i].ActivityPositionText + " </span>" +
					"</td>" +
					"<td>" +
						removeButton +
					"</td>" +
				"</tr>");
        }
        
        if(arrayActivity.length==1)
            activityList.selectRow($("#activityTable").find("tr:first"), false);                        

        $("#activityTable").find("tr").click(
			function() {
			    activityList.selectRow(this, true)
			}
		);

        $("#activityTable").find("tr").find("a").click(
			function() {
			    activityList.removeRow(this.parentNode.parentNode)
			}
		);
    }

    this.removeRow = function(row) {

        this.StoreCurentObject();

        var activityIndexDelete = $(row).attr("indexId");
        var actualSelectedActivityIndex = $("#activityTable").find("tr[class=selectedrow]").attr("indexId");

        var activityDeleteRowClass = $(row).attr("class");
        var actualActivity = this.DeleteActivityObject(activityIndexDelete, controlsAddActivity.ActivitiesHiddenField);
        this.DeleteActivityTextObject(activityIndexDelete, controlsAddActivity.ActivitiesTextHiddenField);

        if (actualActivity.length == 0 || actualActivity.length == undefined) {         
            var listActivity = this.GetAllActivityObject(controlsAddActivity.ActivitiesHiddenField);
            var listActivityText = this.AddActivityTextObject(new activityText("", "", ""), controlsAddActivity.ActivitiesTextHiddenField)
            this.BuildActivityTable(listActivity, controlsAddActivity.ActivitiesHiddenField, listActivityText);
            FillActivityPanel(new activity(0, 0, 0, 0, 0, 0, false, false, false, false, false), controlsAddActivity);
        }
        else {
            this.BuildActivityTable(this.GetAllActivityObject(controlsAddActivity.ActivitiesHiddenField), controlsAddActivity.ActivitiesHiddenField,
            this.GetAllActivityObject(controlsAddActivity.ActivitiesTextHiddenField));
        }

        if (activityDeleteRowClass == "selectedrow")
            this.selectRow($("#activityTable").find("tr:first"), false);
        else {
            if (activityIndexDelete < actualSelectedActivityIndex)
                this.selectRow($("#activityTable").find("tr[indexId=" + (actualSelectedActivityIndex - 1) + "]"), false);
            else
                this.selectRow($("#activityTable").find("tr[indexId=" + actualSelectedActivityIndex + "]"), false);
        }
    }

    this.AddActivityObject = function(activityObject, activityHiddenField) {
        var actualActivity;
        if (($("#" + activityHiddenField).val() != "" || $("#" + activityHiddenField).val() == "{}") &&
			$("#" + activityHiddenField).val() != undefined)
            actualActivity = JSON.parse($("#" + activityHiddenField).val());
        else
            actualActivity = new Array();

        actualActivity.push(activityObject);

        $("#" + activityHiddenField).val(JSON.stringify(actualActivity));

        return actualActivity;
    }

    this.AddActivityTextObject = function(activityTextObject, activityTextHiddenField) {
        var actualTextActivity;
        if (($("#" + activityTextHiddenField).val() != "" || $("#" + activityTextHiddenField).val() == "{}") &&
			$("#" + activityTextHiddenField).val() != undefined)
            actualTextActivity = JSON.parse($("#" + activityTextHiddenField).val());
        else
            actualTextActivity = new Array();

        actualTextActivity.push(activityTextObject);

        $("#" + activityTextHiddenField).val(JSON.stringify(actualTextActivity));

        return actualTextActivity;
    }

    this.GetAllActivityObject = function(activityHiddenField) {
        if (($("#" + activityHiddenField).val() != "") && ($("#" + activityHiddenField).val() != undefined))
            return JSON.parse($("#" + activityHiddenField).val());
        else
            return new Array();
    }

    function FillActivityPanel(activityObject, targetControlActivity) {
        if (activityObject == undefined)
            return;
            
        if (!isNaN(activityObject.ActivityType) && activityObject.ActivityType != 0) {
            $("#" + targetControlActivity.ActivityType).val(activityObject.ActivityType);
        }
        else {
            $("#" + targetControlActivity.ActivityType).val("");
        }
        
        setCascadingDropDownValuesTwoParameters($("#" + targetControlActivity.BuildingHandlerHiddenField).val(),
		    targetControlActivity.ActivityType, targetControlActivity.Activity, $("#" + targetControlActivity.ApplicationFormHiddenField).val(),
			'applicationFormSettingId', 'activityTypeId');        

        if (!isNaN(activityObject.Position) && activityObject.Position != 0) {
            $("#" + targetControlActivity.ActivityPosition).val(activityObject.Position);
        }
        else {
            $("#" + targetControlActivity.ActivityPosition).val("");
        }

        if (activityObject.HoursPerWeek != null && activityObject.HoursPerWeek != 0)
            $("#" + targetControlActivity.ActivityHours).val(activityObject.HoursPerWeek);
        else
            $("#" + targetControlActivity.ActivityHours).val("");

        if (activityObject.WeeksPerYear != null && activityObject.WeeksPerYear != 0)
            $("#" + targetControlActivity.ActivityWeeks).val(activityObject.WeeksPerYear);
        else
            $("#" + targetControlActivity.ActivityWeeks).val("");

        if (activityObject.NumberOfYears != null && activityObject.NumberOfYears != 0)
            $("#" + targetControlActivity.ActivityYears).val(activityObject.NumberOfYears);
        else
            $("#" + targetControlActivity.ActivityYears).val("");

        $("#" + targetControlActivity.ActivityGrade9).attr('checked', activityObject.ParticipatedGrade09);
        $("#" + targetControlActivity.ActivityGrade10).attr('checked', activityObject.ParticipatedGrade10);
        $("#" + targetControlActivity.ActivityGrade11).attr('checked', activityObject.ParticipatedGrade11);
        $("#" + targetControlActivity.ActivityGrade12).attr('checked', activityObject.ParticipatedGrade12);

        $("#" + targetControlActivity.ActivityPostsecondary).attr('checked', activityObject.ParticipatedPostsecondary);

        if (!isNaN(activityObject.Activity)) {
            $("#" + targetControlActivity.Activity).val(activityObject.Activity);
        }
        else {
            $("#" + targetControlActivity.Activity).val("");
        }

        $("#" + controlsAddActivity.ActivityIdHiddenField).val(activityObject.Activity);
    }

    this.DeleteActivityObject = function(indexObject, activitiesHiddenField) {
        var actualActivity;

        if ($("#" + activitiesHiddenField).val() != "")
            actualActivity = JSON.parse($("#" + activitiesHiddenField).val());

        actualActivity.splice(indexObject, 1);
        $("#" + activitiesHiddenField).val(JSON.stringify(actualActivity));

        return actualActivity;
    }

    this.DeleteActivityTextObject = function(indexObject, activitiesTextHiddenField) {
        var actualActivityText;

        if ($("#" + activitiesTextHiddenField).val() != "")
            actualActivityText = JSON.parse($("#" + activitiesTextHiddenField).val());

        actualActivityText.splice(indexObject, 1);
        $("#" + activitiesTextHiddenField).val(JSON.stringify(actualActivityText));

        return actualActivityText;
    }

    this.updateSelectedRow = function() {
        var activityObjects = activityList.GetAllActivityObject(controlsAddActivity.ActivitiesHiddenField);
        
        if(activityObjects.length == 0){
            var allActivityObjects = activityList.AddActivityObject(activityList.GetActivityObjectFromPanel(controlsAddActivity), 
                controlsAddActivity.ActivitiesHiddenField);
            var allActivityTextObjects = activityList.AddActivityTextObject(new activityText("", "", ""), 
                controlsAddActivity.ActivitiesTextHiddenField);
            activityList.BuildActivityTable(allActivityObjects, controlsAddActivity.ActivitiesHiddenField, allActivityTextObjects);
        }
        var selectedRow = $("#activityTable").find("tr[class=selectedrow]");
        updateRow(selectedRow);
    }
    
    function updateRow(row) {   
        var spans = $(row).find("span");
        
        if (spans.length > 0){
            var activityText = GetTextFromValue(controlsAddActivity.Activity, $("#" + controlsAddActivity.Activity).val());
            var positionText = GetTextFromValue(controlsAddActivity.ActivityPosition, $("#" + controlsAddActivity.ActivityPosition).val());
            spans[0].innerHTML = activityText;
            spans[1].innerHTML = "&nbsp;&nbsp;" + positionText;
        }
    }
    
    this.saveActivitiesTable = function() {
        var oldIndexObject = $("#activityTable").find("tr[class=selectedrow]").attr("indexId");
        var oldActivityObject = this.GetActivityObjectFromPanel(controlsAddActivity);
        var oldActivityTextObject = this.GetActivityTextObjectFromPanel(controlsAddActivity);
        if (oldIndexObject != undefined || !isNaN(oldActivityObject.ActivityType) || !isNaN(oldActivityObject.Activity) ||
            !isNaN(oldActivityObject.Position) || oldActivityObject.HoursPerWeek != 0 || !isNaN(oldActivityObject.WeeksPerYear) ||
            !isNaN(oldActivityObject.NumberOfYears) || oldActivityObject.ParticipatedGrade09 != false ||
            oldActivityObject.ParticipatedGrade10 != false || oldActivityObject.ParticipatedGrade11 != false ||
            oldActivityObject.ParticipatedGrade12 != false || oldActivityObject.ParticipatedPostsecondary != false) { 
                if (oldIndexObject == undefined) oldIndexObject = 0; 
                this.EditActivityObject(oldIndexObject, controlsAddActivity.ActivitiesHiddenField, 
                    controlsAddActivity.ActivitiesTextHiddenField, oldActivityObject, oldActivityTextObject);
        }
    }   

    function GetTextFromValue(targetDropDown, value) {
        if (value == null || value == "")
            return "";
        else {
            if (!isNaN(value)) {
                var dropDown = document.getElementById(targetDropDown);
                var index;
                for (i = 0; i < dropDown.length; i = i + 1) {
                    if (dropDown.options[i].value == value) {
                        index = i;
                        break;
                    }
                }
                var dropDownTex = dropDown.options[index].text;
                if (dropDownTex != undefined)
                    return dropDownTex;
                else
                    return "";
            }
            else
                return "";
        }
    }
}