﻿// JScript File

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

function checkAnswer(textfield, quizID, questionID) {
    //validates a user-supplied answer
    //window.status = textfield.value;
    
    var url = "checkquestion&quizid=" + quizID + "&questionid=" + questionID + "&answer=" + encodeURIComponent(textfield.value);
    makeAjaxRequest(url);
}

function rankStartOver() {
    window.location.reload();
}

function checkRank(textfield,quizID,questionID) {
    var url = "checkrankquestion&quizid=" + quizID + "&questionid=" + questionID + "&answer=" + encodeURIComponent(textfield.value);
    makeAjaxRequest(url);
}

function checkAllRankAnswers() {
    var urlString = getRankUrlString();
    var url = "checkrankanswers&quizid=" + document.getElementById("HiddenFieldQuizID").value + "&arg=" + urlString;
    makeAjaxRequest(url);
}

function getRankUrlString() {
    var tbl = document.getElementById("TableQuestions");
    var rows = tbl.rows;
    var rowCount = rows.length;
    var urlString = "";
    if (rowCount > 0) {
        for (var i = 0; i < rowCount; i++) {
            var currentRow = rows(i);
            var cells = currentRow.cells;
            var cellCount = cells.length;
            var inputCell = cells(0);
            var inputText = inputCell.children(0);
            
            var id = inputText.id.replace(/textboxAnswer_/, "");            
            var cls = inputText.className;
            var value = inputText.value;
            
            if (i < rowCount - 1) {
                urlString+= (id + "|" + cls + "|" + value + "~");   
            }
            else {
                urlString += (id + "|" + cls + "|" + value);
            }
        }
    }
    return urlString;
}

function getRankHint() {
    var availableHints = document.getElementById("spanAvailableHints");
    var totalHints = document.getElementById("spanTotalHints");
    if (availableHints.innerText == "0") {
        alert("Sorry, you\'ve used up all or your hints");
    } else {
        /*there are available hints. */
        var urlString = getRankUrlString();
        var url = "getrankhint&quizid=" + document.getElementById("HiddenFieldQuizID").value + "&arg=" + urlString;
        makeAjaxRequest(url);
    }
}

function giveUpRank() {
    var urlString = getRankUrlString();
    var url = "giveuprank&quizid=" + document.getElementById("HiddenFieldQuizID").value + "&arg=" + urlString;
    makeAjaxRequest(url);
}

function isNumeric(inputField) {

    inputField.value = inputField.value.trim();
    if (inputField.value != "") {
        var checkNum = parseInt(inputField.value)
        if(isNaN(checkNum)) {
            inputField.value = "";
        }
    }
}

/*AJAX HANDLERS REGION*/

function checkquestion(resp) {
    //ajax handler to render text control based on response.
    var id = resp.getElementsByTagName('questionid')[0].firstChild.data;
    var iscorrect = resp.getElementsByTagName('questioncorrect')[0].firstChild.data;
    var elementID = "textboxAnswer_" + id;
    var inputElement = document.getElementById(elementID);
    
    if (iscorrect == "true") {
        inputElement.className = "RIGHT";
        totalCorrect++;
        inputElement.disabled = true;
    }
    if (iscorrect == "false") {
        inputElement.className = "WRONG";
    }
    
    /*get total score*/
    document.getElementById("lblCorrectCount").innerText = totalCorrect;
    
    /*repeat values on top score header*/
    document.getElementById("lblCorrectCountTop").innerText = document.getElementById("lblCorrectCount").innerText;
    document.getElementById("lblTotalCountTop").innerText = document.getElementById("lblTotalCount").innerText;
    
    /*if score is 100%, then notify user*/
    if (document.getElementById("lblCorrectCount").innerText == document.getElementById("lblTotalCount").innerText) {
        alert("Congratulations! You have answered all questions correctly.");
    }
    
}

function checkrankquestion(resp) {
    //ajax handler to render text control based on response.
    var id = resp.getElementsByTagName('questionid')[0].firstChild.data;
    var iscorrect = resp.getElementsByTagName('questioncorrect')[0].firstChild.data;
    var elementID = "textboxAnswer_" + id;
    var inputElement = document.getElementById(elementID);
    
    if (iscorrect == "right") {
        inputElement.className = "RIGHT";
        totalCorrect++;
        inputElement.disabled = true;
        
        try {
            var divAnswerNode = resp.getElementsByTagName('divanswer')[0].firstChild;
            var answerHtml = divAnswerNode.nodeValue;
            var divAnswer = document.getElementById("divAnswer_" + id);
            divAnswer.innerHTML = answerHtml;
        } catch (e) {}
               
    }
    if (iscorrect == "wrong") {
        inputElement.className = "WRONG";
    }  
    
    if (iscorrect == "blank") {
        inputElement.className = "BLANK";
    }
    
    /*get total score*/
    document.getElementById("lblCorrectCount").innerText = totalCorrect;
    
    /*repeat values on top score header*/
    document.getElementById("lblCorrectCountTop").innerText = document.getElementById("lblCorrectCount").innerText;
    document.getElementById("lblTotalCountTop").innerText = document.getElementById("lblTotalCount").innerText;
    
    /*if score is 100%, then notify user*/
    if (document.getElementById("lblCorrectCount").innerText == document.getElementById("lblTotalCount").innerText) {
        alert("Congratulations! You have answered all questions correctly.");
    }  
}

function checkrankanswers(resp) {
    totalCorrect = 0;

    var qNodes = resp.getElementsByTagName('question');
    for (var i = 0; i < qNodes.length; i++) {
        var qNode = qNodes(i);
        var qAttribs = qNode.attributes;
        var id = "";
        var status = "";
        for (var j = 0; j < qAttribs.length; j++) {
            var qAttrib = qAttribs(j);  
            if (qAttrib.nodeName == "status")
                status = qAttrib.nodeValue; 
            if (qAttrib.nodeName == "id")   
                id = qAttrib.nodeValue; 
        }
        
        
        var textEle = document.getElementById("textboxAnswer_" + id);

        if (status == "correct") {
            textEle.className = "RIGHT";
            textEle.readOnly = true;
            totalCorrect++;
            
            /*show right-hand-side html*/
            var answerEle = qNode.selectSingleNode("answer");
            if (answerEle != null) {
                var showOnAnswerAttrib = answerEle.attributes.getNamedItem("showonanswer"); 
                if (showOnAnswerAttrib != null) {         
                    var showOnAnswer = showOnAnswerAttrib.nodeValue;                    
                    if (showOnAnswer == "true") {
                        var divAnswerNode = answerEle.firstChild;
                        if (divAnswerNode != null) {
                            var answerHtml = divAnswerNode.nodeValue;
                            var divAnswer = document.getElementById("divAnswer_" + id);
                            divAnswer.innerHTML = answerHtml;
                        }
                    }
                }
            } 
            
        }
        if (status == "incorrect") {
            textEle.className = "WRONG";
            textEle.readOnly = false;
        }
        if (status == "hint") {
            textEle.className = "HINT"; 
            textEle.readOnly = true;           
        }        
    }
    
    /*get total score*/
    document.getElementById("lblCorrectCount").innerText = totalCorrect;
    
    /*repeat values on top score header*/
    document.getElementById("lblCorrectCountTop").innerText = document.getElementById("lblCorrectCount").innerText;
    document.getElementById("lblTotalCountTop").innerText = document.getElementById("lblTotalCount").innerText;
    
    /*if score is 100%, then notify user*/
    if (document.getElementById("lblCorrectCount").innerText == document.getElementById("lblTotalCount").innerText) {
        alert("Congratulations! You have answered all questions correctly.");
    }  
}

function getrankhint(resp) {
    var qNodes = resp.getElementsByTagName('question');
    for (var i = 0; i < qNodes.length; i++) {
        var qNode = qNodes(i);
        var qAttribs = qNode.attributes;
        var id = "";
        var status = "";
        for (var j = 0; j < qAttribs.length; j++) {
            var qAttrib = qAttribs(j);  
            if (qAttrib.nodeName == "status")
                status = qAttrib.nodeValue; 
            if (qAttrib.nodeName == "id")   
                id = qAttrib.nodeValue; 
        }
        
        
        var textEle = document.getElementById("textboxAnswer_" + id);
        if (status == "hint") {
            textEle.className = "HINT";
            textEle.readOnly = true;
            textEle.value = id;
            //textEle.disabled = true;            
        }
        
        var answerEle = qNode.selectSingleNode("answer");
        if (answerEle != null) {
            var showOnHintAttrib = answerEle.attributes.getNamedItem("showonhint"); 
            if (showOnHintAttrib != null) {         
                var showOnHint = showOnHintAttrib.nodeValue;                    
                if (showOnHint == "true") {
                    var divAnswerNode = answerEle.firstChild;
                    if (divAnswerNode != null) {
                        var answerHtml = divAnswerNode.nodeValue;
                        var divAnswer = document.getElementById("divAnswer_" + id);
                        divAnswer.innerHTML = answerHtml;
                    }
                }
            }
        }
        
        var availableHints = document.getElementById("spanAvailableHints");
        availableHints.innerText = parseInt(availableHints.innerText) - 1;       
    }
}

function giveuprank(resp) {
    var qNodes = resp.getElementsByTagName('question');
    for (var i = 0; i < qNodes.length; i++) {
        var qNode = qNodes(i);
        var qAttribs = qNode.attributes;
        var id = "";
        var status = "";
        for (var j = 0; j < qAttribs.length; j++) {
            var qAttrib = qAttribs(j);  
            if (qAttrib.nodeName == "status")
                status = qAttrib.nodeValue; 
            if (qAttrib.nodeName == "id")   
                id = qAttrib.nodeValue; 
        }
        
        
        var textEle = document.getElementById("textboxAnswer_" + id);
        textEle.readOnly = true;
        textEle.value = id;
        textEle.className = "BLANK";
        document.getElementById("divButtons").style.visibility = "hidden";  
        
        var answerEle = qNode.selectSingleNode("answer");
        if (answerEle != null) {
            var showOnAnswerAttrib = answerEle.attributes.getNamedItem("showonanswer"); 
            if (showOnAnswerAttrib != null) {         
                var showOnAnswer = showOnAnswerAttrib.nodeValue;                    
                if (showOnAnswer == "true") {
                    var divAnswerNode = answerEle.firstChild;
                    if (divAnswerNode != null) {
                        var answerHtml = divAnswerNode.nodeValue;
                        var divAnswer = document.getElementById("divAnswer_" + id);
                        divAnswer.innerHTML = answerHtml;
                    }
                }
            }
        }  
    }
}
