var gCH1PathTree = [
    [1,2], // 0
    [4,3], // 1
    [3,5], // 2
    [4,6], // 3
    [7,6], // 4
    [6,8], // 5
    [8,9], // 6
    [10,9], // 7
    [9,11], // 8
    [10,12], // 9
    [13,12], // 10
    [12,14], // 11
    [14,15], // 12
    [16,15], // 13
    [15,17], // 14
    [16,19], // 15
    [18,19], // 16
    [19,20]  // 17
];

function CH1Quiz( aQuizId, aQuizType, aPageNum, aCorrectAnswer ) {
    this.id          = aQuizId;
    this.type        = aQuizType;
    this.pageNum     = aPageNum;
    this.answer      = aCorrectAnswer;
    this.messages    = new Array();
    this.messageList = new Array();
    this.pathways    = new Array();
    //this.cookie    = new CH1Cookie();
    var self         = this;
    window.onclose = function() {
        self.finish()
    };
}

CH1Quiz.prototype.open = function( aQuestionNumber, aAnswer ) {
    var url;
    if( !this.baseUrl ) {
        //url = this.id + '/index';
        url = this.id;
    }
    else {
        //url = this.baseUrl + '/index';
        url = this.baseUrl;
    }
    if( this.type == 'quiz_pathway' && aAnswer != '' ) {
        var paths = gCH1PathTree[this.pageNum];
        url += paths[aAnswer];
    }
    else if( aQuestionNumber ) {
        url += aQuestionNumber;
    }
    //url += '.html';
    url += '.htm';
    url += '?a=' + aAnswer;
    if( this.form ) {
        for( var i = 0; i < this.form.elements.length; i++ ) {
            if( this.form.elements[i].type == 'hidden' ) {
                url += '&' + escape( this.form.elements[i].name ) + '=' + escape( this.form.elements[i].value );
            }
        }
    }
    var quizwin = window.open( url, 'quiz', 'height=340,width=730,scrollbars=no,toolbar=no,location=no,menubar=no,resizable=no,status=no' );
    quizwin.focus();
};

CH1Quiz.prototype.close = function() {
    this.finish();
    window.onclose = null;
    window.close();
};

CH1Quiz.prototype.run = function() {
    var args = getQueryArgs();
    if( !args['score'] ) {
        args['score'] = 0;
    }
    switch( this.type ) {
        case 'multi1':
            var correct = this.updateScore();
            if( args['showAnswer' ]) {
                //this.showAnswer( correct > 0 ? true : false );
            }
            break;
        case 'multi2':
            this.updateScore();
            break;
        case 'pathway':
            // noop
            break;
        default:
            alert( 'type = ' + this.type );
            break;
    }
    if( this.isLastPage ) {
        this.summarize();
    }
};

CH1Quiz.prototype.pathway = function( aChoice ) {
    document.location = aChoice + ".htm";
    /*if( this.type == 'pathway' ) {
        var paths = gCH1PathTree[this.pageNum];
        if( aChoice == '' ) {
            aChoice = 0;
        }
        var path = parseInt( aChoice );
        //document.location = 'index' + paths[path] + '.html';
        document.location = paths[path] + '.htm';
    }*/
};

CH1Quiz.prototype.updateScore = function() {
    var args = getQueryArgs();
    if( !args['score'] || args['score'] == '' ) {
        args['score'] = 0;
    }
    this.score = parseInt( args['score'] );
    var add = 0;
    if( args['a'] && args['a'] != '' ) {
        add = parseInt( args['a'] );
        this.score += add;
    }
    if( document.forms[0] && document.forms[0].score ) {
        document.forms[0].score.value = this.score;
    }
    return add;
};

// multi-choice 1
CH1Quiz.prototype.showAnswer = function( aState ) {
    if( aState ) {
        document.getElementById( 'correct' ).style.display = 'block';
    } else {
        document.getElementById( 'wrong' ).style.display = 'block';
    }
    return true;
};

// multi-choice 2
CH1Quiz.prototype.addMessage = function( aNumCorrect, aMessage ) {
    this.messages[aNumCorrect] = aMessage;
};

CH1Quiz.prototype.calculateScore = function() {
    var score = 0;
    if( this.cookie.cookies['quiz']['id'] == this.id ) {
        score = this.cookie.cookies['quiz']['score'];
    }
    var msg = '';
    if( this.messages.length < score ) {
        msg = this.messages[this.messages.length - 1];
    }
    else {
        for( var i = score; i >= 0; i-- ) {
            if( this.messages[i] ) {
                msg = this.messages[i];
                break;
            }
        }
    }
    document.getElementById( 'message' ).innerHTML = msg;
};

CH1Quiz.prototype.addMessage = function( aMinScore, aMessage ) {
    var messageObj = {
        score: aMinScore,
        message: aMessage
    };
    this.messageList.push( messageObj );
    return this.messageList.length;
};

CH1Quiz.prototype.getMessage = function() {
    var message = '';
    var sortfunc = function( a, b ) {
        return a.score - b.score;
    }
    this.messageList.sort( sortfunc );
    for( var i = this.messageList.length - 1; i >= 0; i-- ) {
        if( this.score > this.messageList[i].score ) {
            return this.messageList[i].message;
        }
    }
    return this.messageList[0].message;
};

// multi-choice 2
CH1Quiz.prototype.summarize = function( aScore ) {
    var conclusionDiv = document.getElementById( 'quiz_body' );
    var lastMessage = conclusionDiv.lastChild;
    var messageNodes = new Array();
    var elNodeType = conclusionDiv.ELEMENT_NODE;
    if( !elNodeType ) {
        // for braindead IE
        elNodeType = 1;
    }
    while( lastMessage != null ) {
        if( lastMessage.nodeType != elNodeType || lastMessage.nodeName != 'DIV' ) {
            lastMessage = lastMessage.previousSibling;
            continue;
        }
        var match = lastMessage.id.match( /^message_([0-9]*)$/ );
        if( !match ) {
            lastMessage = lastMessage.previousSibling;
            continue;
        }
        var messageNode = {
            node: lastMessage,
            score: parseInt( match[1] )
        };
        messageNodes.push( messageNode );
        lastMessage = lastMessage.previousSibling;
    }
    var sortfunc = function( a, b ) {
        return a.score - b.score;
    };
    messageNodes.sort( sortfunc );
    var found = false;
    for( var i = messageNodes.length - 1; i >= 0; i-- ) {
        if( messageNodes[i].score < aScore ) {
            messageNodes[i].node.style.display = 'inline';
            found = true;
            break;
        }
    }
    if( !found && messageNodes[0] != null ) {
        messageNodes[0].node.style.display = 'inline';
    }
};

// pathway
CH1Quiz.prototype.pathwayResult = function( qnum ) {
    
}

function submitQuiz( quizAnswer )
{   var theaction = $( 'thequiz' ).readAttribute( 'action' );
    document.location.href = theaction + quizAnswer + "/";
}

