var currCat = -1;
var currDef = -1;
var definitionDiv = null;

var ieBrowser = false;
var ua = window.navigator.userAgent.toLowerCase();
if ((i = ua.indexOf('msie')) != -1) {
    ieBrowser = true;
    var ieversion  = parseFloat('0' + ua.substr(i+5), 10);
}

if (ieBrowser){
    document.onmousemove = mouseMovedMs;
    var oldOnload = document.body.onload;
    var newOnload = function() {
        oldOnload();
        addDefinitionDiv();
    }
    document.body.onload = newOnload;
}else{
    document.onmousemove = mouseMovedOther;
    addDefinitionDiv();
}

var mouseX = 0;
var mouseY = 0;

function mouseMovedMs(pe) {
	var diffX = document.documentElement.scrollLeft;
	var diffY = document.documentElement.scrollTop;
    mouseX = window.event.clientX + diffX - 28;
    mouseY = window.event.clientY + diffY + 10;
}
function mouseMovedOther(pe) {
    mouseX = pe.pageX - 28;
    mouseY = pe.pageY + 10;
}


function addDefinitionDiv() {
    definitionDiv = document.createElement('div');
    definitionDiv.setAttribute('id', 'definitionDiv');
    definitionDiv.setAttribute('class', 'definitionDiv');
    definitionDiv.setAttribute('className', 'definitionDiv');
    document.getElementById('content').appendChild(definitionDiv);
}
    

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return curleft;
}    

function showDefinitionDiv() {
    //definitionDiv.style.left = "" + mouseX + "px";
    definitionDiv.style.top = "" + mouseY + "px";
	var catlistObj = document.getElementById('catlist');
	if (catlistObj){
		definitionDiv.style.left = "" + (findPos(catlistObj) + 187) + "px";
	}else{
		definitionDiv.style.left = "" + mouseX + "px";
	}
    definitionDiv.style.visibility = "visible";
}

function hideDefinitionDiv() {
    definitionDiv.style.visibility = "hidden";
}

function changeCatTo(catId) {
    if (currCat != -1) {
        var obj = document.getElementById('definitions_for_' + currCat);
        if (obj) {
            obj.style.display = 'none';
        }
		obj = document.getElementById('category_' + currCat);
		if (obj) {
			obj.className = "";
		}
        if (currDef != -1) {
            var obj = document.getElementById('descriptions_for_' + currCat + '_' + currDef);
            if (obj) {
                obj.style.display = 'none';
            }
            currDef = -1;
        }
    }
    var obj = document.getElementById('definitions_for_' + catId);
    if (obj) {
        obj.style.display = '';
        currCat = catId;
    }
	obj = document.getElementById('category_' + catId);
    if (obj) {
        obj.className = "active";
		currCat = catId;
    }
}

function changeDefTo(defId) {
    if (currCat != -1 && currDef != -1) {
        /*var obj = document.getElementById('descriptions_for_' + currCat + '_' + currDef);
        if (obj) {
            obj.style.display = 'none';
        }*/
        hideDefinitionDiv();
    }
    var obj = document.getElementById('descriptions_for_' + currCat + '_' + defId);
    if (obj) {
        //obj.style.display = '';
        definitionDiv.innerHTML = obj.innerHTML;
        currDef = defId;
        showDefinitionDiv();
    }
}

function changeCatDefTo(catId, defId) {
    hideDefinitionDiv();
    var obj = document.getElementById('descriptions_for_' + catId + '_' + defId);
    if (obj) {
        //obj.style.display = '';
        definitionDiv.innerHTML = obj.innerHTML;
        showDefinitionDiv();
    }
}

function defSelectCanceled(defID) {
    hideDefinitionDiv();
}

function getFirstCatID() {
    var ret = 1;
    var catList = document.getElementById('catlist');
    if (catList) {
        var firstListItem = catList.getElementsByTagName("li")[0];
        if (firstListItem) {
            ret = firstListItem.id.substring(9);
        }
    }
    return ret;
}

/* load first category*/
changeCatTo(getFirstCatID());

/*******************************************
the selector function, define it somewhere

function definitionSelected(catName,defName) {
    alert(catName + '/' + defName);
}
********************************************/