var sBaseURI = '../';
//var bPHP = isInternet();
var bIE = navigator.userAgent.toLowerCase().indexOf('msie') != -1;
/*
alert('PHP: ' +bPHP);
alert('IE: ' +bIE);
*/
/*if (bPHP) {
	if (bIE) {
		var sBaseURL = './render.php?body=div&xml=';
		var sBaseURL2 = './render.php?body=yes&xml=';
	} else {
		var sBaseURL = './divrender2.htm?xml=';
		var sBaseURL2 = './render2.htm?xml=';
	}
} else {*/
	var sBaseURL = './divrender.htm?xml=';
	var sBaseURL2 = './render.htm?xml=';
//}

var sLastSearchText;
var aCache = new Array();
var sLastSearchLang = '';
var aLastSearchResults = new Array();
var aHitSet = [];
for (var i in caLangs)
	aHitSet[caLangs[i]] = '';
var iLastHitIndex = 0;
/*
function isInternet(  )
{

	var location = document.location.href;
	if( location.indexOf("http") == 0 ){
		return isPhpInstalled=="PHP";
	}else{
		return 0;
	}
}  // isInternet
*/
function getBrowserPostfix() {
	if (bIE)
		return '';
	else
		return '8';
}

function loadFromCache(sFileName) {
	var oXML = null;
	for (var i = 0; i < aCache.length; i++) {
		var aRow = aCache[i];
		if (aRow[0] == sFileName)
			oXML = aRow[1];
	}
	if (oXML == null) {
		try {
			oXML = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
			oXML.async = false;
			oXML.load(sFileName);
		} catch(e) { // Try Mozilla
			try {
				var oHTTPRequest = new XMLHttpRequest();
				oHTTPRequest.open('GET', sFileName, false);
				oHTTPRequest.send(null);
				oXML = oHTTPRequest.responseXML;
			} catch(e) {

			}
		}

		if (oXML != null)
			aCache.push(new Array(sFileName, oXML));
	}
	return oXML;
}

var goCurrentLink = null; 

function init() {
	var sLang = getParam('lang');
	switchLang(sLang != '' ? sLang : csDefaultLang);

	resetContents();
	resizeInnerTable();
}

function showLink(oThis, sURL) {
	if (goCurrentLink != null)
		goCurrentLink.style.color = '';
	if (oThis != null)
		oThis.style.color = '#bc5333';
	window.frames['idFrame'].location.href = sURL;
	goCurrentLink = oThis;
}

function getLink() {
	return window.frames['idFrame'].location.href;
}

// Vienna only
function showToc(oThis) {
	if (goCurrentLink != null)
		goCurrentLink.style.color = '';
	if (oThis != null)
		oThis.style.color = '#bc5333';
	clearSearchResults(true);
	var sURL = sBaseURL2 +'xml/' +sCurrentLang.toLowerCase() +'/full.xml&xsl=xslt/addmode.xsl&cxsl=xslt/vienna' +getBrowserPostfix() +'.xsl&mode=toc&lang=' +sCurrentLang;
	showLink(null, sURL);

	goCurrentLink = oThis;
}

// Vienna only
function showDToc(oThis) {
	if (goCurrentLink != null)
		goCurrentLink.style.color = '';
	if (oThis != null)
		oThis.style.color = '#bc5333';

	clearSearchResults(true);
	var sURL = sBaseURL2 +'xml/' +sCurrentLang.toLowerCase() +'/full.xml&xsl=xslt/addmode.xsl&cxsl=xslt/vienna' +getBrowserPostfix() +'.xsl&mode=dtoc&lang=' +sCurrentLang
	showLink(null, sURL);

	goCurrentLink = oThis;

}

function showSearchLink(sURL) {
	window.frames['idSearch'].location.href = sURL;
}

function showLinksLink(sURL) {
	window.frames['idLinks'].location.href = sURL;
}

var sCurrentLang = csDefaultLang;

function translate(sName, sLang) {
	var oLang = aLang[sLang == null ? sCurrentLang : sLang];
	if (oLang == null) {
		alert('Language \'' +(sLang == null ? sCurrentLang : sLang) +'\' not found.');
		return '';
	}
	
	return aLang[sLang == null ? sCurrentLang : sLang][sName];
}

function exec(sText) {
	return sText.replace(/\{([^\}]+)\}/g, function($0, $1) { 
		var sRes = eval($1); return sRes == null ? '' : sRes; 
	} );
};

function switchLang(sLang, bSkipJump) {
	document.getElementById('idLangCSS').href = '../' +sLang.toLowerCase() +'.css';

	for (var i in caLangs)
		document.getElementById('idFlag' +caLangs[i]).style.display = (sLang != caLangs[i] ? 'inline' : 'none');

	window.document.title = translate('tit_' +csAppMode, sLang);
	var oOrg = document.getElementById('idOrgName');
	if (oOrg != null)
		oOrg.innerHTML = translate('PAGENAME', sLang);

	var oCurrentMenuDiv = document.getElementById('idDiv' +sCurrentLang );
	oCurrentMenuDiv.style.display = 'none';

	var oCurrentMenuDiv = document.getElementById('idDiv' +sLang);
	oCurrentMenuDiv.style.display = 'inline';
	var oDiv = document.getElementById('idD0');
	//alert(csCaption[sLang] +', ' +csAZ[sLang]);
	oDiv.innerHTML = translate('cpt_' +csAppMode, sLang);
	oDiv = document.getElementById('idD1');
	if (oDiv != null)
		oDiv.innerHTML = translate('A2Z', sLang);
	

	if (sCurrentLang != sLang) {
		sCurrentLang = sLang;

		if (sLastSearchLang == sLang) {
			openSearch(true);
//				doSearch(sLastSearchText);
		} else
			closeSearch();
			
		if (!bSkipJump)
			jumpTab(iCurrentTab, true);
	}
}

function clearSearchResults(bHitSetsToo) {
	aLastSearchResults = new Array();
	sLastSearchLang = null;
	sLastSearchText = null;
	if (bHitSetsToo)
		for (var i in caLangs)
			aHitSet[caLangs[i]] = '';
}

function jumpEntry(sLang, sClass, sHash, sHitSet, sLetter) {
	if (sHitSet == '')
		sHitSet = aHitSet[sLang];
	else
		aHitSet[sLang] = sHitSet;

	switchLang(sLang);

	try {
		if (aLastSearchResults.length == 0 && isSearchOpen()) {
			var oSearch = window.frames['idSearch'];
			var oDoc = oSearch.document.getElementById('idResults');
			if (oDoc != null) {
				aLastSearchResults = oDoc.innerHTML.split('|');
				aLastSearchResults.pop(); // Remove empty element
				aLastSearchResults.push('-----' +sHash);
			}
		} else {
			aLastSearchResults.pop(); // Remove empty element
			aLastSearchResults.push('-----' +sHash);
		}
	} catch(e) {
		alert(e.message);
	}

	var sXML = 'xml/' +sLang.toLowerCase() +'/' +(sLetter != null ? sLetter : sClass.substr(0, 2)) +'.xml';
	var sCurrent = getParam('xml', getLink());
	var sHash = encodeURI(sHash);
//		alert(sCurrent +', ' +sXML +', ' +sHash);

	var sHitSet = encodeURI(sHitSet);
	var sCurrentHitset = getParam('hitset', getLink());

	var bNewPage = (sXML != sCurrent) || (sHitSet != sCurrentHitset);
	if (!bNewPage)
		bNewPage = !moveToHash(sHash);

	if (bNewPage) {
		if (csAppMode == 'locarno')
			var sURL = sBaseURL +sXML +'&xsl=xslt/addparams.xsl&cxsl=xslt/byclass' +getBrowserPostfix() +'.xsl&hash=' +sHash +'&hitset=' +sHitSet;
		else
			var sURL = sBaseURL +sXML +'&xsl=xslt/pager.xsl&cxsl=xslt/byclass' +getBrowserPostfix() +'.xsl&hash=' +sHash +'&hitset=' +sHitSet;
		showLink(null, sURL);
	}
}

function moveToHash(sHash) {
	var oFrame = window.frames['idFrame'];
	var oBase = oFrame.document.getElementsByName(sHash);
	if (oBase.length != 0) {
		oFrame.timedScroll(sHash);
		return true;
	}
	return false;
}

function jumpHTMLPage(sLang, sPage, sHitSet, sBookmark, bRandomize) {
	var sURL = '' +sPage +'.htm';
	if (sHitSet != null)
		sURL += '?hitset=' +encodeURI(sHitSet);
	if (bRandomize)
		sURL += (sHitSet == null ? '?' : '&') +'random=' +Math.random();
	if (sBookmark != null)
		sURL += '#' +sBookmark;
	showLink(null, sURL);
//		window.frames['idFrame'].hilightHTMLWords();
}

function openSearch(bSilent) {
	if (goCurrentLink != null)
		goCurrentLink.style.color = '';
	bSilent = (bSilent == null ? false : bSilent);
	var oTemp = document.getElementById('idSearchBox');
	if (oTemp != null) {
		oTemp.style.display = 'inline';
		oTemp = document.getElementById('idDisplayBox');
		oTemp.style.right = '200px';
	}
	var oSearch = document.getElementById('idSearch');
	oSearch.style.display = 'inline';

	if (!bSilent) {
		var sURL = sBaseURL +'xml/' +sCurrentLang.toLowerCase() +'/index.xml&xsl=xslt/search.xsl&cxsl=xslt/hitset' +getBrowserPostfix() +'.xsl';
		showSearchLink(sURL);
	}
}

function isSearchOpen() {
	var oTemp = document.getElementById('idSearchBox');
	if (oTemp != null) {
		return oTemp.style.display == 'inline';
	} else {
		var oSearch = document.getElementById('idSearch');
		return oSearch.style.display == 'inline';
	}
}

function closeSearch() {
	var oTemp = document.getElementById('idSearchBox');
	if (oTemp != null) {
		oTemp.style.display = 'none';
		oTemp = document.getElementById('idDisplayBox');
		oTemp.style.right = 0;
	}
	var oSearch = document.getElementById('idSearch');
	oSearch.style.display = 'none';
}

function doSearch(sText) {
	clearSearchResults();

	sLastSearchLang = sCurrentLang;
	sLastSearchText = sText;

	var sURL = sBaseURL +'xml/' +sCurrentLang.toLowerCase() +'/index.xml';
	try {
		var aStopWords = getStopWords(sCurrentLang);
	
		var oRoot = doParse(sText, false, false, true, aStopWords);
		var sQuery = doRenderQuery(oRoot, false);
		sURL += doExecSearch(oRoot) +'&xslg=xslt/group.xsl&cxsl=xslt/hitset' +getBrowserPostfix() +'.xsl&pattern=' +encodeURI(sText) +'&query=' +encodeURI(sQuery);
//			prompt('',sURL);
		showSearchLink(sURL);
	} catch(e) {
		var sError = e.message;
		var iPos = sError.indexOf('@');
		if (iPos != -1)
			sError = sError.substr(0, iPos -1);
		alert(sError +'!');
	}
}

function switchTab(iId, bActive) {
	var iIndex = Number(bActive) +1;

	document.getElementById('idL' +iId).src = 'images/' +iIndex +'l.png';
	document.getElementById('idR' +iId).src = 'images/' +iIndex +'r.png';
	document.getElementById('idB' +iId).style.backgroundImage = 'url(images/' +iIndex +'b.png)';
	document.getElementById('idD' +iId).className = (bActive ? 'active' : 'inactive');
}

var iCurrentTab = 0;

function jumpTab(iIndex, bForced) {
	if (bForced || iCurrentTab != iIndex) {
		switchTab(iCurrentTab, false);
		switchTab(iIndex, true);
		iCurrentTab = iIndex;

		switch (iIndex) {
			case 0:
				showLinksLink('classes_' +sCurrentLang.toLowerCase() +'.htm');
				break;
			case 1:
				showLinksLink('letters_' +sCurrentLang.toLowerCase() +'.htm');
				break;
		}
	}
}

function hilightFrameHTMLWords() {
	var sSrc = window.frames['idFrame'].location.href;
	if (sSrc.indexOf('render.htm') == -1) {
		var sHitSet = getParam('hitset', sSrc);
		if (sHitSet != '')
			window.frames['idFrame'].document.body.innerHTML = hilightHTMLWords(window.frames['idFrame'].document.body.innerHTML, sHitSet);
	}
}

function goToPos(sIndex, bAux, sHitSet, bForceNewPage) {
	if (sHitSet == '' || sHitSet == null)
		sHitSet = aHitSet[sCurrentLang];
	else
		aHitSet[sCurrentLang] = sHitSet;

	try {
		if (aLastSearchResults.length == 0 && isSearchOpen()) {
			var oSearch = window.frames['idSearch'];
			var oDoc = oSearch.document.getElementById('idResults');
			if (oDoc != null) {
				aLastSearchResults = oDoc.innerHTML.split('|');
				aLastSearchResults.pop(); // Remove empty element
				aLastSearchResults.push(sIndex);
//					alert(sClass);
			}
		} else {
			aLastSearchResults.pop(); // Remove empty element
			aLastSearchResults.push(sIndex);
		}

//			alert(aLastSearchResults.length);
	} catch(e) {
		alert(e.message);
	}

	var sXML = 'xml/' +sCurrentLang.toLowerCase() +'/full.xml';
	var sCurrent = getParam('xml', getLink());
	var sHash = 'id' +sIndex.replace(/\./g, '_');

//		alert(sCurrent +', ' +sXML +', ' +sHash +', ' +sHitSet);

	if (sHitSet == null)
		sHitSet = '';
	else
		sHitSet = encodeURI(sHitSet);
	var sCurrentHitset = getParam('hitset', getLink());

	var bNewPage = bForceNewPage || (sXML != sCurrent) || (sHitSet != sCurrentHitset);

	if (!bNewPage)
		bNewPage = !moveToHash(sHash);

	if (bNewPage) {
		var sURL = sBaseURL +sXML +'&xsl=xslt/addmode.xsl&cxsl=xslt/vienna' +getBrowserPostfix() +'.xsl&mode=full&index=' +sIndex.split('.')[0] +'&lang=' +sCurrentLang +'&hash=' +sHash;
		if (sHitSet != '')
			sURL += '&hitset=' +sHitSet;

		showLink(null, sURL);
	}
}

function goToLangPos(sLang, sPos) {
	switchLang(sLang, true);
	goToPos(sPos, false);
}

function resizeInnerTable(  ) {
	if (bIE) {
		var iHeight = document.body.clientHeight;
		var iSub = 28;
		try {
			iSub = ciIEDisplayHeightReduction;
		} catch(e) {
		}
		document.getElementById('idDisplayBox').style.height = iHeight -iSub;
		document.getElementById('idSearchBox').style.height = iHeight -iSub;
	}
	
	//oRow = document.getElementById('idTDLang');
	//oRow.style.height=(document.body.clientHeight - ciHeightBase +(bIE ? ciIEHeight : ciFFHeight));//190 - 120 +4);
}  // resizeInnerTable

//wipo-nice10/nice/frnpre.htm
//wipo-nice10/nice/divrender.htm?xml=xml/fr/01.xml&xsl=xslt/pager.xsl&cxsl=xslt/byclass8.xsl&pos=1
//wipo-nice10/nice/divrender.htm?xml=xml/fr/PL.xml&xsl=xslt/pager.xsl&cxsl=xslt/byclass8.xsl&pos=1
function migrateInnerURI(sOldLang, sLang) {
	var sURL = getLink();
	//var oRep = new Regexp('/' +sOldLang +'(main|ngui|nmaa|nmap|nnic|npre|nrem|lgui|lloc|lnot|lpre|lrec|vgui|vpre|vrec|vvie)', 'i');
	if (sURL.indexOf('/divrender') == -1)
		sURL = sURL.replace(new RegExp('/' +sOldLang.toLowerCase() +'([a-z]+\\.htm)$', 'i'), '/' +sLang.toLowerCase() +'$1');
	else {
		//alert(validateURL('xml/en/SK.xml'));
		//alert(validateURL('xml/fr/SK.xml'));
		var aMatch = /\/([A-Z][A-Z]\.xml)/.exec(sURL);
		if (aMatch != null) { // class view
			var sTestURL = 'xml/' +sLang.toLowerCase() +'/' +aMatch[1];
			if (!validateURL(sTestURL)) {
				resetContents();
				return;
			}
		}
		sURL = sURL.replace('/' +sOldLang.toLowerCase() +'/', '/' +sLang.toLowerCase() +'/');
	}
	showLink(null, sURL);
}

function goToLang(sLang) {
	migrateInnerURI(sCurrentLang, sLang);
	switchLang(sLang);
}

