function switchDiv(iId, bActive) {
	if (bActive == null)
		bActive = document.getElementById('idImg_' +iId).src.indexOf('plus') == -1;

	document.getElementById('idImg_' +iId).src = 'images/' +(bActive ? 'plus.png' : 'minus.png');
	document.getElementById('idDiv_' +iId).style.display = (bActive ? 'none' : 'inline');
}

function switchAllDivs(bActive) {
	var oDivs = document.getElementsByTagName('div');
	for (var i = 0; i < oDivs.length; i++) {
		var oDiv = oDivs[i]; // idDiv_id32A5008
		var sId = oDiv.id;
		if (sId.substr(0, 6) == 'idDiv_') {
			switchDiv(sId.substr(6), bActive);
		}
	}
}

function removeParam(sURL, sParam) {
	var iPos = sURL.indexOf('&' +sParam +'=');
	if (iPos == -1)
		iPos = sURL.indexOf('?' +sParam +'=');
	
	if (iPos != -1) {
		var iEndPos = sURL.indexOf('&', iPos +1);
		if (iEndPos == -1)
			iEndPos = sURL.indexOf('#', iPos +1);
		if (iEndPos == -1)
			sURL = sURL.substr(0, iPos);
		else
			sURL = sURL.substr(0, iPos) +sURL.substr(iEndPos);
	}
	return sURL;
}

function changeParam(sURL, sParam, sValue) {
	var iPos = sURL.indexOf('&' +sParam +'=');
	if (iPos == -1)
		iPos = sURL.indexOf('?' +sParam +'=');
	
	if (iPos != -1) {
		var iEndPos = sURL.indexOf('&', iPos +1);
		if (iEndPos == -1)
			iEndPos = sURL.indexOf('#', iPos +1);
		if (iEndPos == -1)
			sURL = sURL.substr(0, iPos +sParam.length +2) +sValue;
		else
			sURL = sURL.substr(0, iPos +sParam.length +2) +sValue +sURL.substr(iEndPos);
	}
	return sURL;
}

function goToEntry(sLang, sClass, sHash, sHitSet, sFull) {
	setHitIndex(sFull);
	
	var oRoot = getRoot(sLang);
	oRoot.jumpEntry(sLang, sClass, sHash, sHitSet);
}

function goToHTMLPage(sLang, sPage, sHitSet, sFull) {
	setHitIndex(sFull);

	var oRoot = getRoot(sLang);
	oRoot.jumpHTMLPage(sLang, sPage, sHitSet);
}

function goPage(iPos) {
	var sURL = window.location.href;

	sURL = removeParam(removeParam(sURL, 'pos'), 'hash') +'&pos=' +iPos;

	window.location.href = sURL;
}

function transformDataIE(aXSLs, sXML, aParams) {
	var oXML = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
	oXML.async = false;
	var sOut = '';
	var oRoot = getRoot();
	
	for (var t = 0; t < aXSLs.length; t++) {
		if (t == 0)
			oXML.load(sXML);
		else
			oXML.loadXML(sOut);
	
		if (oRoot == null) {
    		var oXSL = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
		    oXSL.async = false;
		    oXSL.load(aXSLs[t]);
		} else
			var oXSL = oRoot.loadFromCache(aXSLs[t]);
	    
		var oXSLT = new ActiveXObject('MSXML2.XSLTemplate');
		oXSLT.stylesheet = oXSL;
		var oXSLProc = oXSLT.createProcessor();
		oXSLProc.input = oXML;

		if (aParams != null)
			for (var i = 0; i < (aParams.length /2); i++) {
				oXSLProc.addParameter(aParams[i *2], aParams[i *2 +1]);
			}
		oXSLProc.transform();
		
		sOut = oXSLProc.output;
	}
	
	oXML.loadXML(sOut);
	return oXML;
}

function transformDataNS(aXSLs, sXML, aParams) {
	var oHTTPRequest = new XMLHttpRequest();
	oHTTPRequest.open('GET', sXML, false);
	oHTTPRequest.send(null);
	var oXML = oHTTPRequest.responseXML;
	var oRoot = getRoot();

	for (var t = 0; t < aXSLs.length; t++) {
		if (oRoot == null) {
    		oHTTPRequest.open('GET', aXSLs[t], false);
    		oHTTPRequest.send(null);
    		var oXSL = oHTTPRequest.responseXML;
    	} else
	    	var oXSL = oRoot.loadFromCache(aXSLs[t]);
		
		var oProc = new XSLTProcessor();
		oProc.importStylesheet(oXSL);

		if (aParams != null)
			for (var i = 0; i < (aParams.length /2); i++) {
				oProc.setParameter(null, aParams[i *2], aParams[i *2 +1]);
			}

		oXML = oProc.transformToDocument(oXML);
	}
	
	return oXML;
}

function render(aXSLs, sXML, aParams) {
	try {
		return transformDataIE(aXSLs, sXML, aParams);
	} catch(e1) {
		try {
			return transformDataNS(aXSLs, sXML, aParams);
		} catch(e2) {
		}
	}
	return null;
}

function regSplit(sString, oRegExp) {
	var aRes = new Array();
	var sSplit, aArr, iPrev = 0;
	while ((aArr= oRegExp.exec(sString)) != null) {
		sSplit = sString.substring(iPrev, aArr.index);
		if (sSplit != '')
			aRes.push(sSplit);
		iPrev = aArr.index +1;
	}
	sSplit = sString.substring(iPrev);
	if (sSplit != '')
		aRes.push(sSplit);
	return aRes;		
}

function execSearchOnKey(oThis, oEvent) {
//    if (event.keyCode == 13) // event.which
	if (oEvent.which) {
	    if (oEvent.which == 13) // event.which
	    	execSearch();
	} else 
	    if (oEvent.keyCode == 13) // event.which
	    	execSearch();
}

function execSearch() {
	var oRoot = getRoot();
	var sText = document.getElementById('idPattern').value;
	oRoot.doSearch(sText);
}

function execCloseSearch() {
	var oRoot = getRoot();
	oRoot.closeSearch();
}

function initDivRender() {
	// Hilight	    	
	var sHitSet = getParam('hitset');
	if (sHitSet != '')		
		document.body.innerHTML = hilightWords(document.body.innerHTML, sHitSet);
	else {
		var oRoot = getRoot();
		var aHits = oRoot.aLastSearchResults;
		if (aHits.length != 0)
			document.body.innerHTML = hilightWords2(document.body.innerHTML, aHits);
	}
/*
	if (sHitSet != '')
		document.body.innerHTML = hilightHTMLWords(document.body.innerHTML, sHitSet);
*/		
	var sHash = getParam('hash');
	if (sHash != '') 
		setTimeout('timedScroll("' +sHash +'")', 100);
		
	var oPattern = document.getElementById('idPattern');
	if (oPattern != null)
		oPattern.focus();
}

function initNormalRender() {
	// Hilight	    	
	var sHitSet = getParam('hitset');
	if (sHitSet != '')		
		document.body.innerHTML = hilightHTMLWords(document.body.innerHTML, sHitSet);
}

function initNormalRenderWithTD() {
	// Hilight	    	
	var sHitSet = getParam('hitset');
	if (sHitSet != '')		
		document.body.innerHTML = hilightWords2(document.body.innerHTML, sHitSet);
	var oPattern = document.getElementById('idPattern');
	if (oPattern != null)
		oPattern.focus();
}

function timedScroll(sHash) {
	var bIE = navigator.userAgent.toLowerCase().indexOf('msie') != -1;
	var iOffset = getObjectTop(sHash);
	var oDiv = document.getElementById('idDisplay');
	if (oDiv != null)
		oDiv.scrollTop = iOffset +(bIE ? -78 : -90);
}

function showNotes(sClassId, sLang, sFilter, sFull) {
	setHitIndex(sFull);

	var oRoot = getRoot();
	oRoot.goToClassNotes(sClassId, sLang, sFilter);
}

function jumpPos(sIndex, bAux, sHitSet, sFull, sMode) {
	setHitIndex(sIndex);
	var oRoot = getRoot();
	oRoot.goToPos(sIndex, bAux, sHitSet, sMode == 'dtoc');
}

function jumpToc() {
	var oRoot = getRoot();
	oRoot.showToc();
}

function jumpDToc() {
	var oRoot = getRoot();
	oRoot.showDToc();
}

function jumpLangPos(sLang, sPos) {
//	alert(sLang +', ' +sPos);
	var oRoot = getRoot();
	oRoot.goToLangPos(sLang, sPos);
}

var iHitIndex = null;

function hilightHit(iOffset) {
	var oAs = document.getElementsByTagName('a');
	var oObj = null;
	
	if (iHitIndex == null) {
		oObj = oAs[0];
	} else {
		oObj = oAs[iHitIndex];
		oObj.className = '';
		
		iHitIndex += iOffset;
		if (iHitIndex < 0)
			iHitIndex = 0;
		if (iHitIndex >= oAs.length)
			iHitIndex = oAs.length -1;
			
		oObj = oAs[iHitIndex];
	}
	
	return oObj;
}

function setHitIndex(sHash) {
	var oAs = document.getElementsByTagName('a');
	for (var i = 0; i < oAs.length; i++) {
	    var oObj = oAs[i];
	    var sData = decodeURI(oObj.href);
	    var iPos1 = sData.indexOf('[');
	    var iPos2 = sData.indexOf(']');

	    if (sData.substring(iPos1, iPos2 +1) == sHash) {
	    	if (iHitIndex != null) {
				oObj = oAs[iHitIndex];
				oObj.className = '';
			}
			
			oObj = oAs[i];
			oObj.className = 'hilight';
			
			iHitIndex = i;
	    	break;
	    }
	}	
}

function goPrevHit() {
	var oObj = hilightHit(-1);
	if (oObj.href.indexOf('javascript:;') == 0)
		oObj.onclick();
	else
		eval(oObj.href);
}

function goNextHit() {
	var oObj = hilightHit(1);
	if (oObj.href.indexOf('javascript:;') == 0)
		oObj.onclick();
	else
		eval(oObj.href);
}
