
var g_eventModel;
var alt = false;
var ctrl = false;
var shift = false;



function windowOnload(e)
{
    // init event model
    g_eventModel = getEventModel(e);
    
    // capture events
    if (g_eventModel == "NN4") {
        document.captureEvents(Event.KEYDOWN); }
    //document.onkeydown = onKeyDown;
    
    return true;
}

// install onload event handler
window.onload = windowOnload;



function getBrowser()
{
    if (document.layers)
        return "NN4";
    if (document.all)
        return "IE4+";
}


function getEventModel(e)
{
    if (e) 
        if (e.eventPhase)
            return "W3C";
        else
            return "NN4";
    else if (window.event)
        return "IE4+";
    else
        return "unknown";
}


function getKey(e)
{
    var keycode;

    switch (g_eventModel) {
        case "IE4+":
            return window.event.keyCode;
            
        case "W3C":            
        case "NN4":
            return e.which;
    }
    
    return null;
}


function getModifiers(e)
{
    switch (g_eventModel) {
        case "IE4+":
            e = window.event;
            alt = (e.altKey) ? true : false;
            ctrl = (e.ctrlKey) ? true : false;
            shift = (e.shiftKey) ? true : false;
            break;
            
        case "NN4":
            alt = ((e.modifiers & Event.ALT_MASK) == Event.ALT_MASK);
            ctrl = ((e.modifiers & Event.CTRL_MASK) == Event.CTRL_MASK);
            shift = ((e.modifiers & Event.SHIFT_MASK) == Event.SHIFT_MASK);
            break;
            
        case "W3C":
            alt = (e.altKey) ? true : false;
            ctrl = (e.ctrlKey) ? true : false;
            shift = (e.shiftKey) ? true : false;
            break;
    }
    
    return [alt, ctrl, shift];
}





function pixel2int(pixel)
{
    return Number(pixel.replace("px", ""));
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


function getElementPos(elm)
{
    return [findPosX(elm), findPosY(elm)];
}

function setElementPos(elm, pos)
{
    elm.style.left = pos[0];
    elm.style.top = pos[1];
}


function getElement(id)
{
    return document.getElementById(id);
}

function setElementVisible(elm, vis)
{
    if (vis) {
        elm.style.display = "inline";
        //elm.style.visible = "visible";
    } else {
        elm.style.display = "none";
        //elm.style.visible = "hidden";
    }
}


function setOpacity(obj, opacity) {
    //opacity = (opacity == 1) ? .999 : opacity;  
    
    // IE/Win 
    obj.style.filter = "alpha(opacity="+100*opacity+")";
    
    // Safari<1.2, Konqueror 
    obj.style.KHTMLOpacity = opacity; 
    
    // Older Mozilla and Firefox 
    obj.style.MozOpacity = opacity; 
    
    // Safari 1.2, newer Firefox and Mozilla, CSS3 
    obj.style.opacity = opacity;
}



function matrixCopy(mat)
{
    var mat2 = new Array(mat.length);
    
    for (var i=0; i<mat.length; i++) {
        mat2[i] = new Array(mat[i].length);
        for (var j=0; j<mat[i].length; j++) {
            mat2[i][j] = mat[i][j];
        }
    }
    
    return mat2;
}
