﻿function __Initialize() {
}

function __SetValue(name, value) {
	if (document.getElementById(name) == null) {
		var cmiInput = document.createElement("input");
		cmiInput.setAttribute("type", "hidden");
		cmiInput.setAttribute("id", name);
		cmiInput.setAttribute("name", name);
		document.forms[0].appendChild(cmiInput);
	}
	document.getElementById(name).value = value;
}

function __GetValue(name) {
	if (document.getElementById(name) == null)
		return "";
	else
		return document.getElementById(name).value;
}

var studentName = '';

function __Terminate() {

	var studentNameElement = document.getElementById("Student-name");
	studentName = studentNameElement.value.replace(/^\s+|\s+$/g, '');
	var titleAttr = studentNameElement.getAttribute('title');
	if (studentName == '' || studentName == titleAttr) {
        alert("Please enter Student Name");
        return;
    }

    document.body.style.cursor = 'wait';
    window.setTimeout("document.body.style.cursor = 'auto';", 10000);
    window.setTimeout("SaveRecord();", 1);
}

function SaveRecord() {

    // build interactions JSON string
    var interactions = new Array();
    var interactionIndex = 0;
    while (__GetValue("cmi.interactions." + interactionIndex + ".id"))
    {
        var interactionId = __GetValue("cmi.interactions." + interactionIndex + ".id");
        var learnerResponse = __GetValue("cmi.interactions." + interactionIndex + ".learner_response");
        var resultTypeId = GetResultTypeId(__GetValue("cmi.interactions." + interactionIndex + ".result"));

        interactions[interactionIndex] = { I: interactionId, R: learnerResponse, T: resultTypeId };

        interactionIndex++;
    }
    var interactionsJson = JSON.stringify(interactions);

    // get record data
    var selectedNavItem = $('ul#Navigation-container li a.selected');
    var contentObjectId = parseInt(selectedNavItem.attr('id'));
    var contentObjectTitle = selectedNavItem.text();
    var scoreRaw = parseFloat(__GetValue("cmi.score.raw"));
    var scoreScaled = parseFloat(__GetValue("cmi.score.scaled"));
    var scoreScaledPercent = scoreScaled * 100.0;

    // construct URI for post to service operation
    var submitRecordsUri = "SubmitRecord?ContentObjectId=" + contentObjectId + "&ScoreRaw=" + scoreRaw + "M&ScoreScaled=" + scoreScaled + "M&Interactions='" + encodeURI(interactionsJson) + "'&StudentName='" + encodeURI(studentName) + "'";

    // build request JSON
    var requestData = { __batchRequests: [
        { __changeRequests: [
            {
                requestUri: submitRecordsUri,
                method: "POST"
            }
        ]}
    ]};

    // save record
    OData.request(
        {
            requestUri: dataServicesRoot + "CingletreeLearning.svc/$batch",
            method: "POST",
            data: requestData
        },
        function (data) {
            document.body.style.cursor = 'auto';
            if (!data || ResponseErrorsExist(data)) {
                alert("Connection to server failed.  Please check your internet connection and try again.");
            }
            else {
                var nextButton = $('#Next-button');
                if (nextButton.is(':disabled')) {
                    alert("Submitted - " + contentObjectTitle + "\n\nScore: " + scoreScaledPercent.toFixed(0) + "%");
                }
                else {
                    if (confirm("Submitted - " + contentObjectTitle + "\n\nScore: " + scoreScaledPercent.toFixed(0) + "%\n\nWould you like to continue to the next lesson?")) {
                        nextButton.click();
                    }
                }
            }
        },
        function (err) {
            document.body.style.cursor = 'auto';
            alert("Connection to server failed.  Please check your internet connection and try again.");
            //                alert(err.message);
        },
        OData.batchHandler
    );
}

function GetResultTypeId(resultType) {
    switch (resultType) {
        case "correct":
            return 1;
            break;
        case "incorrect":
            return 2;
            break;
        case "unanticipated":
            return 3;
            break;
        case "numeric":
            return 5;
            break;
        case "neutral":
        default:
            return 4;
            break;
    }
}

function ResponseErrorsExist(data) {
    var errorsFound = false;

    for (var i = 0; i < data.__batchResponses.length; i++) {
        var batchResponse = data.__batchResponses[i];
        for (var j = 0; j < batchResponse.__changeResponses.length; j++) {
            var changeResponse = batchResponse.__changeResponses[j];
            if (changeResponse.message) {
                errorsFound = true;
            }
        }
    }

    return errorsFound;
}
