
//
//  Engine 8.
//
//

// ##################################################################
//
//    General Methods follow
//
// ##################################################################

function rand() {
    var x                                                        ;                                  
    x = ( Math.floor(100*Math.random())) % random_count          ;
    while (x == ran) {
        x = ( Math.floor(100*Math.random()) ) % random_count     ;
    } 
    ran = x                                                      ;
    return x                                                     ;
}

function moveTo(obj,x,y)
{
    if (IE) {
        var units = (moveTo.arguments.length > 3) ? moveTo.arguments[3] : "px" ;
        obj.style.left = x + "" + units                           ;
        obj.style.top  = y + "" + units                           ;
    }
}


function question_position(name) {
    var obj                                                       ;
    
    for (i = 0; i < MAX ; i++) {
        if (name == layerNameArray[i]) {
            break                                                 ;
        }
    }
    
    if (IE) {

        obj = document.getElementById(name)                       ;
        obj.style.left = column_1                                 ;
        obj.style.top = (MATCHLIST_START + spacing*(matchNameArray[layerNameArray[i]]-1))            ;


    } else if (N6) {
    
        obj = document.getElementById(name)                       ;
        obj.style.left = column_1                                 ;
        obj.style.top   = (MATCHLIST_START + spacing*(matchNameArray[layerNameArray[i]]-1))          ;
            
        
    } else {
        // N4 requires no assertion of the location
        // of the answer objects.
    }
}


function assert_assignments() {
    var obj                                                       ;
    
    if (IE) {
        for (i = 0; i < MAX ; i++) {
            obj = document.getElementById(layerNameArray[i])      ;
            obj.style.left = column_1                             ;
            obj.style.top             = (MATCHLIST_START + spacing*(matchNameArray[layerNameArray[i]]-1));
            obj = document.getElementById("answer"+ (i+1))        ;
            obj.style.left = column_2                             ;
            obj.style.top             = (MATCHLIST_START + spacing*(i));          
        }
    } else if (N6) {
    
        for (i = 0 ; i < MAX ; i++) {
            obj = document.getElementById(layerNameArray[i])      ;
            obj.style.left = column_1                             ;
            obj.style.top   = (MATCHLIST_START + spacing*(matchNameArray[layerNameArray[i]]-1))          ;

            obj = document.getElementById("answer"+ (i+1))        ;
            obj.style.left = column_2                             ;
            obj.style.top   = (MATCHLIST_START + spacing*(i))     ;
        }
        
    } else {
        // N4 requires no assertion of the location
        // of the answer objects.
    }
    
}

function setzIndex(question, zOrder) {
    if (N6) {
        question.style.zIndex = zOrder                            ;
    } else {
        question.zIndex = zOrder                                  ;
    }

}

function shiftTo(question, x, y)
{
    if (N4) {
        question.moveTo(x,y)                                      ;
    } else if (N6) {
        question.style.left = x                                   ;
        question.style.top  = y                                   ;
    } else {
        question.pixelLeft = x                                    ;
        question.pixelTop  = y                                    ;
    }
}

function setAnswerIndex(QuestionName) 
{
    index = QuestionName.substring(8)                             ;
    index = danswer[index-1]                                      ;
    return index                                                  ;

}


function setSelectedElem(e) {

    if (N4) {
        clickX = e.pageX                                          ;
        clickY = e.pageY                                          ;
        
        for (i = document.layers.length - 1 ; i >= 0 ; i--) {
            testObj = document.layers[i]                          ;
            
            for (j = 0 ; j < layerNameArray.length ; j++) {
                if ((testObj.id == layerNameArray[j]) 
                && (clickX > testObj.left) &&
                (clickX < testObj.left + testObj.clip.width) &&
                (clickY > testObj.top) &&
                (clickY < testObj.top + testObj.clip.height)) {
                    selectedQuestion = testObj                    ;
                    setzIndex(selectedQuestion, 100)              ;
                    return testObj.id                             ;
                }
            }
        }
    } else {
        imgObj = window.event.srcElement                          ;
        testObj = imgObj.parentElement.style                      ;
         
        layerName = imgObj.parentElement.id                       ;
        for (i = 0 ; i < layerNameArray.length ; i++) { 
            if (layerName == layerNameArray[i] && testObj) {
                selectedQuestion = testObj                        ;
                setzIndex(selectedQuestion, 100)                  ;
                return layerName                                  ;
            }
        }
    }
}

function setNSEventCapture()
{
    document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP) ;
}

function attachEvent(obj)
{
    obj.addEventListener("mousedown", grabQuestion,    false)      ;
    obj.addEventListener("mousemove", dragQuestion,    false)      ;
    obj.addEventListener("mouseup",   releaseQuestion, false)      ;
}    

function grabQuestion(e)
{
    shiftX = document.body.scrollLeft ;
    shiftY = document.body.scrollTop  ;

    if (N6) {
        offsetX = e.layerX                                         ;
        offsetY = e.layerY                                         ;
	     selectedQuestion = this                               ;
        setzIndex(selectedQuestion,100)                            ;
    } else {

        selectedQuestionName = setSelectedElem(e)                  ;
        if (selectedQuestion) { 
            if (N4) {
                offsetX = e.pageX - selectedQuestion.left          ;
                offsetY = e.pageY - selectedQuestion.top           ;
            } else {
                offsetX = window.event.offsetX - shiftX            ;
                offsetY = window.event.offsetY - shiftY            ;
            }
        } 
 
        return false                                               ;
    }
}

function dragQuestion(e)
{
    if (selectedQuestion) {
        if (IE) {
            x = window.event.clientX - offsetX                       ;
            y = window.event.clientY - offsetY  - pointer_adjustment ;
        } else {
            x = e.pageX - offsetX                                  ;
            y = e.pageY - offsetY                                  ;
        }
        shiftTo(selectedQuestion, x, y)                            ;
        
        return false                                               ;
    }
}

function releaseQuestion(e)
{
    shiftX = document.body.scrollLeft ;
    shiftY = document.body.scrollTop  ;

    if (selectedQuestion) {

        selectedAnswerIndex = setAnswerIndex(selectedQuestionName) ; // Grab answer index.
        found               = "no" ;
        for (i = 0 ; ((i < 5) && (found == "no") && (selectedAnswerIndex < answer_list_length+1)) ; 
            i++ , selectedAnswerIndex += repeat_cycle) {
            name = "answer" + selectedAnswerIndex  ;

            if (IE) {
                releaseX = window.event.clientX + shiftX            ;
                releaseY = window.event.clientY + shiftY            ;
          
                targetObj    = document.all[name].style             ;
                targetWidth  = document.all[name].offsetWidth       ;
                targetHeight = document.all[name].offsetHeight      ;
                targetLeft   = targetObj.pixelLeft                  ;
                targetTop    = targetObj.pixelTop                   ;
  
            } else {
                releaseX = e.pageX + shiftX                         ;
                releaseY = e.pageY + shiftY                         ;
        
                if (N6) {
                    targetObj    = document.getElementById(name).style         ;
                    targetWidth  = document.getElementById(name).offsetWidth   ;
                    targetHeight = document.getElementById(name).offsetHeight  ;
                    targetLeft   = parseInt(document.getElementById(name).style.left) ;
                    targetTop    = parseInt(document.getElementById(name).style.top)  ;
                } else {
                    targetObj    = document.layers[name]            ;
                    targetWidth  = document.layers[name].clip.width ;
                    targetHeight = document.layers[name].clip.height;
                    targetLeft   = document.layers[name].left       ;
                    targetTop    = document.layers[name].top        ;
                }
            }

            if ((releaseX > targetLeft) &&
                (releaseX < targetLeft + targetWidth) &&
                (releaseY > targetTop) &&
                (releaseY < targetTop + targetHeight)) {
   
                selectedQuestion.visibility = "hidden"              ;
                alert("Right On !!!")                               ;
                level                  = 0                          ;
                found                  = "yes"                      ;
            }           
        }
        if (found == "no") {
                question_position(selectedQuestionName)             ;
                alert("Nope: Try again.")                           ;
                level                  = 100                        ;
        }
        setzIndex(selectedQuestion, level)                          ;
        selectedQuestion = null                                     ;
    
    } 
}


function init() 
{

    if (N6) { 
    
        for (i = 0 ; i < MAX ; i++) {
            question = document.getElementById(layerNameArray[i])   ;
            attacheEvent(question)                                  ;
        }  
        window.onmousemove = dragQuestion                           ;
   } else {
	     if (N4) {
	         setNSEventCapture()                                ;
        }
        document.onmousedown = grabQuestion                         ;
        document.onmousemove = dragQuestion                         ;
        document.onmouseup   = releaseQuestion                      ;
    }
  
}

