//------------------ GED functions

function GEDSearch(frm, idTabComp)
{
	var SetGEDDone = eval("SetGEDDone" + idTabComp);
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);
	var oDOMXMLGEDDocuments = eval('oDOMXMLGEDDocuments'+idTabComp);

	var sQuery = new String("");
	
	var clauseEt = "false";

	SetGEDDone(false);

	if( frm.search.value != '' )
		sQuery += "search=" + unicodeToEscape(frm.search.value);

	if ( frm.et != null )
	{
		if ( frm.et.checked ) clauseEt = "true";
	}

	sQuery += "&max=" + frm.maxarticles.value;

	var sUrl = new String(g_MetaSearchCompPath);
	sUrl += "results_ged.jsp?" + sQuery + "&clauseEt=" + clauseEt + "&IdTabComp=" + idTabComp + "&TableColor=" + frm.tablecolor.value;

	if( oDOMXMLGEDDocuments.load(sUrl) == false )
		alert(oDOMXMLGEDDocuments.parseError.reason);

	// always return false to prevent submit
	return false;
}

function GEDSearchStateChange(idTabComp)
{
	var oDOMXMLGEDDocuments = eval('oDOMXMLGEDDocuments'+idTabComp);

	if (oDOMXMLGEDDocuments.readyState == 4 && oDOMXMLGEDDocuments.parseError.errorCode != -1072897514)
	{
		if (oDOMXMLGEDDocuments.parseError.errorCode == 0 && oDOMXMLGEDDocuments.selectSingleNode('//GEDXMLResult/Code').text == 'OK')
		{
			var DIVDocuments = document.getElementById('GEDResult'+idTabComp);
			var oDOMXSLGEDDocuments = eval('oDOMXSLGEDDocuments'+idTabComp);
			DIVDocuments.innerHTML = oDOMXMLGEDDocuments.transformNode(oDOMXSLGEDDocuments);
			DIVDocuments.style.display = 'block';
			var SetGEDDone = eval("SetGEDDone" + idTabComp);
			SetGEDDone(true);
			TestDone(idTabComp);
		}
		else
		{
			DisplayError('GEDSearchStateChange', 'GEDXMLResult', oDOMXMLGEDDocuments, idTabComp, true);
		}
	}
}

function GEDOpenDocument(doc, idTabComp)
{
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);

	var sUrl = new String('../components/ged/tools/dlg/');
	
	if( doc.getAttribute('docclassname') == g_GED_NEWS_DOCUMENT_CLASS_NAME )
            sUrl += "dlg_opennewsDocument.jsp?IdTab=" + doc.getAttribute('idtab');
		else
			sUrl += "dlg_opendocument.jsp?IdTab=" + doc.getAttribute('idtab');

	sUrl += "&IdTabComp=" + idTabComp;
	sUrl += "&IdDoc=" + doc.getAttribute('iddoc');
	sUrl += "&Download=False";
	sUrl += "&IdGed=" + doc.getAttribute('idged');
	sUrl += "&IntVersion=" + doc.getAttribute('intversion');
	
	
	openCenterWnd(sUrl,"MetaSearchGEDWindowOpenDocument",800,600,true,true);
}

//------------------ Forum functions

function ForumSearch(frm, idTabComp)
{
	var SetForumDone = eval("SetForumDone" + idTabComp);
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);
	var oDOMXMLForumDocuments = eval('oDOMXMLForumDocuments'+idTabComp);

	var sQuery = new String("");

	SetForumDone(false);

	if( frm.search.value != '' )
		sQuery += "search=" + unicodeToEscape(frm.search.value);

	sQuery += "&max=" + frm.maxarticles.value;

	var sUrl = new String(g_MetaSearchCompPath);
	sUrl += "results_forum.jsp?" + sQuery + "&IdTabComp=" + idTabComp + "&TableColor=" + frm.tablecolor.value;

	oDOMXMLForumDocuments.load(sUrl);

	// always return false to prevent submit

	return false;
}

function ForumSearchStateChange(idTabComp)
{
	var oDOMXSLForumDocuments = eval('oDOMXSLForumDocuments'+idTabComp);
	var oDOMXMLForumDocuments = eval('oDOMXMLForumDocuments'+idTabComp);

	if (oDOMXMLForumDocuments.readyState == 4 && oDOMXMLForumDocuments.parseError.errorCode != -1072897514)
	{
		if (oDOMXMLForumDocuments.parseError.errorCode == 0)
		{
			var DIVDocuments = document.getElementById('ForumResult'+idTabComp);
			DIVDocuments.innerHTML = oDOMXMLForumDocuments.transformNode(oDOMXSLForumDocuments);
			DIVDocuments.style.display = 'block';
			var SetForumDone = eval("SetForumDone" + idTabComp);
			SetForumDone(true);
			TestDone(idTabComp);
		}
		else
		{
			DisplayError('ForumSearchStateChange', 'ForumXMLResult', oDOMXMLForumDocuments, idTabComp, true);
		}
	}
}

function ForumOpenDocument(doc, idTabComp)
{
	var filepath = "../components/forum/forum_edit.jsp";
	filepath += "?id="+doc.getAttribute('idforum');
	filepath += "&idchforum="+doc.getAttribute('idchforum');
	filepath += "&idtabcomp="+idTabComp;

	openCenterWnd(filepath,"MetaSearchForumWindowOpenDocument",650,650,true,true);
}

//------------------ Favorites functions

function FavoritesSearch(frm, idTabComp)
{
	var SetFavoritesDone = eval("SetFavoritesDone" + idTabComp);
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);
	var oDOMXMLFavoritesDocuments = eval('oDOMXMLFavoritesDocuments' + idTabComp);

	var sQuery = new String("");

	SetFavoritesDone(false);

	if( frm.search.value != '' )
		sQuery += "search=" + unicodeToEscape(frm.search.value);

	sQuery += "&max=" + frm.maxarticles.value;

	var sUrl = new String(g_MetaSearchCompPath);
	sUrl += "results_favorites.jsp?" + sQuery + "&IdTabComp=" + idTabComp + "&TableColor=" + frm.tablecolor.value + "&ignore_case=true";

	oDOMXMLFavoritesDocuments.load(sUrl);

	// always return false to prevent submit

	return false;
}

function FavoritesSearchStateChange(idTabComp)
{
	var oDOMXSLFavoritesDocuments = eval('oDOMXSLFavoritesDocuments'+idTabComp);
	var oDOMXMLFavoritesDocuments = eval('oDOMXMLFavoritesDocuments'+idTabComp);
	var DIVDocuments = document.getElementById('FavoritesResult'+idTabComp);

	if (oDOMXMLFavoritesDocuments.readyState == 4 && oDOMXMLFavoritesDocuments.parseError.errorCode != -1072897514)
	{
		if (oDOMXMLFavoritesDocuments.parseError.errorCode == 0)
		{
			DIVDocuments.innerHTML = oDOMXMLFavoritesDocuments.transformNode(oDOMXSLFavoritesDocuments);
			DIVDocuments.style.display = 'block';
			var SetFavoritesDone = eval("SetFavoritesDone" + idTabComp);
			SetFavoritesDone(true);
			TestDone(idTabComp);
		}
		else
		{
			DisplayError('FavoritesSearchStateChange', 'FavoritesXMLResult', oDOMXMLFavoritesDocuments, idTabComp, true);
		}
	}
}

var toFind = new String("__target=");

function getTargetFromUrl(sUrl)
{
	var pos = sUrl.lastIndexOf(toFind);

	if( pos == -1 )
		return "_blank";
	else
		return 	sUrl.substr(pos+toFind.length, sUrl.length);
}

function getUrl(sUrl)
{
	var pos = sUrl.lastIndexOf(toFind);

	if( pos == -1 )
		return sUrl;
	else
		return 	sUrl.substr(0, pos);
}

function getAction(url, tar)
{
	if( tar == 'NPExplorer' )
	{
		return "var ie=document.getElementById('NPExplorer');if(ie != null ) {ie.src='" + url + "'} else {window.open('" + url + "','" + tar + "','');}";
	}
	else
		return "window.open('"+url+"','"+tar+"','');";
}

function FavoritesOpenDocument(doc, idTabComp)
{
	var url = doc.getAttribute('url');
	var target = getTargetFromUrl(url);
	var urlToOpen = getUrl(url);
	eval(getAction(urlToOpen, target));
}

//------------------ MyDocuments functions

function MyDocsSearch(frm, idTabComp)
{
	var SetMyDocsDone = eval("SetMyDocsDone" + idTabComp);
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);
	var oDOMXMLMyDocsDocuments = eval('oDOMXMLMyDocsDocuments' + idTabComp);

	var sQuery = new String("");

	SetMyDocsDone(false);

	if( frm.search.value != '' )
		sQuery += "search=" + unicodeToEscape(frm.search.value);

	sQuery += "&max=" + frm.maxarticles.value;

	var sUrl = new String(g_MetaSearchCompPath);
	sUrl += "results_mydocs.jsp?" + sQuery + "&IdTabComp=" + idTabComp + "&TableColor=" + frm.tablecolor.value + "&ignore_case=true";

	oDOMXMLMyDocsDocuments.load(sUrl);

	// always return false to prevent submit

	return false;
}

function MyDocsSearchStateChange(idTabComp)
{
	var oDOMXSLMyDocsDocuments = eval('oDOMXSLMyDocsDocuments'+idTabComp);
	var oDOMXMLMyDocsDocuments = eval('oDOMXMLMyDocsDocuments'+idTabComp);
	var DIVDocuments = document.getElementById('MyDocsResult'+idTabComp);

	if (oDOMXMLMyDocsDocuments.readyState == 4 && oDOMXMLMyDocsDocuments.parseError.errorCode != -1072897514)
	{
		if (oDOMXMLMyDocsDocuments.parseError.errorCode == 0)
		{
			DIVDocuments.innerHTML = oDOMXMLMyDocsDocuments.transformNode(oDOMXSLMyDocsDocuments);
			DIVDocuments.style.display = 'block';
			var SetMyDocsDone = eval("SetMyDocsDone" + idTabComp);
			SetMyDocsDone(true);
			TestDone(idTabComp);
		}
		else
		{
			DisplayError('MyDocsSearchStateChange', 'MyDocsXMLResult', oDOMXMLMyDocsDocuments, idTabComp, true);
		}
	}
}

function MyDocsOpenDocument(doc, idTabComp)
{
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);

	var sUrl = new String(g_MetaSearchCompPath);
	window.open(sUrl + "mydocs_opendocument.jsp?idtabcomp="+ idTabComp +"&name=" + escape(doc.getAttribute('name')));
}

//------------------ Infos functions

function InfosSearch(frm, idTabComp, idTab)
{
	var SetInfosDone = eval("SetInfosDone" + idTabComp);
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);
	var oDOMXMLInfosDocuments = eval('oDOMXMLInfosDocuments' + idTabComp);

	var sQuery = new String("");

	SetInfosDone(false);

	if (frm.search.value != '')
		sQuery += "search=" + unicodeToEscape(frm.search.value);

	if (frm.since.value != '')
		sQuery += "&since=" + frm.since.value;

	sQuery += "&max=" + frm.maxarticles.value;

	var sUrl = new String(g_MetaSearchCompPath);
	sUrl += "results_infos.jsp?" + sQuery + "&IdTabComp=" + idTabComp + "&TableColor=" + frm.tablecolor.value + "&IdTab=" + idTab;

	if( oDOMXMLInfosDocuments.load(sUrl) == false )
		alert('Error: ' + oDOMXMLInfosDocuments.parseError.reason);

	// always return false to prevent submit
	return false;
}

function InfosSearchStateChange(idTabComp)
{
	var oDOMXMLInfosDocuments = eval('oDOMXMLInfosDocuments'+idTabComp);

	if (oDOMXMLInfosDocuments.readyState == 4 && oDOMXMLInfosDocuments.parseError.errorCode != -1072897514)
	{
		if (oDOMXMLInfosDocuments.parseError.errorCode == 0)
		{
			var DIVDocuments = document.getElementById('InfosResult'+idTabComp);
			var oDOMXSLInfosDocuments = eval('oDOMXSLInfosDocuments'+idTabComp);
			DIVDocuments.innerHTML = oDOMXMLInfosDocuments.transformNode(oDOMXSLInfosDocuments);
			DIVDocuments.style.display = 'block';
			var SetInfosDone = eval("SetInfosDone" + idTabComp);
			SetInfosDone(true);
			TestDone(idTabComp);
		}
		else
		{
			DisplayError('InfosSearchStateChange', 'InfosXMLResult', oDOMXMLInfosDocuments, idTabComp, true);
		}
	}
}

function InfosOpenDocument(doc, idTabComp)
{
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);
	var sUrl = new String(g_MetaSearchCompPath);

	// 1 = buffered channel, 2 = xml channel, 3 = notes channel, 4 = published channel

	if (doc.type == '1')
	{
		sUrl += "../infos/annotationslist.jsp?idDoc=" + doc.getAttribute('iddoc') + "&kwsUrlField=" + doc.getAttribute('urlfield') + "&status=activate";
	}
	else if (doc.type == '4')
	{
		sUrl += "../publication/publish_edit.jsp?fn=edit&id=" + doc.getAttribute('iddoc') + "&idchannel=" + doc.getAttribute('idchannel') + "&idtab=" + doc.getAttribute('idtab') + "&idtabcomp=" + idTabComp;
	}
	else
	{
		alert('Internal error : cannot display document content of this channel type (type=' + doc.getAttribute('type') + ')');
		return;
	}

	openCenterWnd(sUrl,'MetaSearchInfos',600,200,true,true);
}


//------------------ Index Server functions

function IndexServerSearch(frm, idTabComp, idTab)
{
	var SetIndexServerDone = eval("SetIndexServerDone" + idTabComp);
	var g_MetaSearchCompPath = eval('g_MetaSearchCompPath' + idTabComp);
	var oDOMXMLIndexServerDocuments = eval('oDOMXMLIndexServerDocuments' + idTabComp);

	SetIndexServerDone(false);

  if( frm.indexServerURL.value == '' )
		return false;

	var sQuery = new String("");
	if (frm.search.value != '')
		sQuery += "?search=" + unicodeToEscape(frm.search.value) + "&max=" + frm.maxarticles.value;

	var sUrl = new String(frm.indexServerURL.value);
	sUrl += sQuery + "&IdTabComp=" + idTabComp + "&TableColor=" + frm.tablecolor.value + "&IdTab=" + idTab + "&Catalog=" + g_MetaSearch_Catalog;
	sUrl += "&LabelNoDoc=" + escape(g_LBL_MetaSearch_nodoc) + "&LabelResults=" + escape(g_LBL_MetaSearch_results) + "&LabelIndexServer=" + escape(g_LBL_MetaSearch_index_server) + "&LabelBytes=" + escape(g_LBL_MetaSearch_Bytes);
	oDOMXMLIndexServerDocuments.load(sUrl);

	// always return false to prevent submit
	return false;
}

function IndexServerSearchStateChange(idTabComp)
{
	var oDOMXSLIndexServerDocuments = eval('oDOMXSLIndexServerDocuments'+idTabComp);
	var oDOMXMLIndexServerDocuments = eval('oDOMXMLIndexServerDocuments'+idTabComp);

	if (oDOMXMLIndexServerDocuments.readyState == 4 && oDOMXMLIndexServerDocuments.parseError.errorCode != -1072897514)
	{
		if (oDOMXMLIndexServerDocuments.parseError.errorCode == 0)
		{
			var html = oDOMXMLIndexServerDocuments.transformNode(oDOMXSLIndexServerDocuments);
			var DIVDocuments = document.getElementById('IndexServerResult'+idTabComp);
			DIVDocuments.innerHTML = html;
			DIVDocuments.style.display = 'block';
			var SetIndexServerDone = eval("SetIndexServerDone" + idTabComp);
			SetIndexServerDone(true);
			TestDone(idTabComp);
		}
		else
		{
			DisplayError('IndexServerSearchStateChange', 'IndexServerXMLResult', oDOMXMLIndexServerDocuments, idTabComp, true);
		}
	}
}

function IndexServerOpenDocument(doc, idTabComp)
{
	var sUrl = new String(doc.url);
	openCenterWnd(sUrl,'MetaSearchIndexServer',600,200,true,true);
}

//------------------ global functions (must be updated if a searching component is added)

function MetaSearch(frm, idTabComp)
{
	var ok = false;

	if (frm.search.value == '')
		return false;

	document.getElementById('ForumResult'+idTabComp).style.display = 'none';
	document.getElementById('GEDResult'+idTabComp).style.display = 'none';
	document.getElementById('FavoritesResult'+idTabComp).style.display = 'none';
	document.getElementById('MyDocsResult'+idTabComp).style.display = 'none';
	document.getElementById('InfosResult'+idTabComp).style.display = 'none';
	document.getElementById('IndexServerResult'+idTabComp).style.display = 'none';

	ToggleWaitStateImg('visible', idTabComp);

	if (frm.ged.value == 'true')
	{
		ok = true;
		GEDSearch(frm, idTabComp);
	}

	if (frm.forum.value == 'true')
	{
		ok = true;
		ForumSearch(frm, idTabComp);
	}

	if (frm.favorites.value == 'true')
	{
		ok = true;
		FavoritesSearch(frm, idTabComp);
	}

	if (frm.doc.value == 'true')
	{
		ok = true;
		MyDocsSearch(frm, idTabComp);
	}

	if (frm.infos.value == 'true')
	{
		ok = true;
		InfosSearch(frm, idTabComp, frm.idtab.value);
	}

	if (frm.indexserver.value == 'true')
	{
		ok = true;
		IndexServerSearch(frm, idTabComp, frm.idtab.value);
	}

	if (!ok)
	{
		// nothing to do : no checkbox is checked !!
		ToggleWaitStateImg('hidden', idTabComp);
	}

	return false;
}

function TestDone(idTabComp)
{
	var forumDone = eval("g_forumDone" + idTabComp);
	var GEDDone = eval("g_GEDDone" + idTabComp);
	var favoritesDone = eval("g_favoritesDone" + idTabComp);
	var mydocsDone = eval("g_mydocsDone" + idTabComp);
	var infosDone = eval("g_infosDone" + idTabComp);
	var indexServerDone = eval("g_indexServerDone" + idTabComp);

	if (forumDone && GEDDone && favoritesDone && mydocsDone && infosDone && indexServerDone)
	{
		ToggleWaitStateImg('hidden', idTabComp);
	}
}

//------------------ independant util functions (no references of search components)

function DisplaySearchOptions(img, idTabComp)
{
	var TABSearchOptions = document.getElementById('TABSearchOptions'+idTabComp);
	var g_IMG_PATH = eval('g_IMG_PATH'+idTabComp);

	if (TABSearchOptions.style.display == 'none')
	{
		TABSearchOptions.style.display = 'block';
		img.src = g_IMG_PATH + "hide.gif";
	}
	else
	{
		TABSearchOptions.style.display = 'none';
		img.src = g_IMG_PATH + "show.gif";
	}
}

function ToggleWaitStateImg(forceMode, idTabComp)
{
	imgLoading = document.getElementById('imgLoading' + idTabComp);

	if (forceMode)
	{
		if (imgLoading.style.visibility != forceMode)
			imgLoading.style.visibility = forceMode;
	}
	else
	{
		if (imgLoading.style.visibility == "visible")
			imgLoading.style.visibility = "hidden";
		else
			imgLoading.style.visibility = "visible";
	}
}

function DisplayError(where, nodeApp, oDom, idTabComp, waitStateImg)
{
	if (waitStateImg)
		ToggleWaitStateImg("hidden", idTabComp);

	var sError = 'Error in ' + where + '\n';
	var node = oDom.selectSingleNode('//' + nodeApp + '/Description');

	if (node == null)
	{
		sError += 'errorCode: ' + oDom.parseError.errorCode + '\n';
		sError += 'reason: ' + oDom.parseError.reason;
		sError += 'srcText: ' + oDom.parseError.srcText + '\n';
		sError += 'url: ' + oDom.parseError.url + '\n';
	}
	else
	{
		sError += 'Description: ' + node.text + '\n';

		var nodeParam = oDom.selectSingleNode('//' + nodeApp +'/Parameters')

		if (nodeParam != null && nodeParam.hasChildNodes())
		{
			sError += 'Parameters: \n';
			nodeParam = nodeParam.childNodes;

			for (var i=0; i<nodeParam.length; i++)
				sError += '\t' + nodeParam.item(i).nodeName + '=' + nodeParam.item(i).text + '\n';
		}
	}

	alert(sError);
}
