/* Funktion zum Baum erstellen */
function renderTree(){
	var t = new Ext.tree.TreePanel({
		id:"tree",
		autoScroll:true,
		autoWidth:true,
		cls:'navigator_produktgruppen_list',
		rootVisible:false,
		animate:true,
		enableDD:false,
		loader: new Ext.tree.TreeLoader({
			dataUrl: ajaxUrl + '&function=ajaxProductGroups',
			requestMethod: 'POST',
			listeners: {load: function(){
								var radios = Ext.select("input[name='auswahl']").elements;
								for(i=0;i<radios.length && !radios[i].checked;i++)
									;
								selectCount(radios[i]);
							}
						}
		}), 
		lines: true,
		containerScroll: true,
		listeners: {click: switchElem}
	});	
	var root = new Ext.tree.AsyncTreeNode({
    	text: 'invisibleRoot', 
		draggable:false,
		id: '0'
	});
	t.setRootNode(root);
	t.render("treeContainer");
}

/* id der Ziel-Selektbox */
target="target";

/* Funktion zum ueberpruefen ob eine Uebergeordnete Node bereits in der Auswahlliste ist */
function parentSelected(node){		
	var item = Ext.get(target).select("option[@value='"+node.id+"']");	
	if(item.elements.length > 0)
		return true;
	
	if(!node.getDepth())
		return false;
		
	return parentSelected(node.parentNode);	
}

/* Funktion zum hinzufuegen einer neuen Node in die Auswahlliste */
function addElem(node){
	/*if(parentSelected(node)){
		
	}*/
	var o = new Option(node.text,node.id);
	o.setAttribute("companies",node.attributes.companies);
	o.setAttribute("exhibitors",node.attributes.exhibitors);
	o.setAttribute("products",node.attributes.products);
	document.getElementById(target).options[document.getElementById(target).length]=o;
	node.eachChild(remElem);
	remParents(node);
}

/* entfernen aller Eltern einer bestimmen Node aus der Auswahlliste */
function remParents(node){
	if(!node.parentNode){
		return;
	}
	node = node.parentNode;
	var item = Ext.get(target).select("option[@value='"+node.id+"']");
	if(item.elements.length > 0){		
		Ext.get(item.elements[0]).remove();
	}
	
	if(node.parentNode)
		remParents(node);
}

/* entfernen einer bestimmten Node aus der Auswahlliste */
function remElem(node){		
	var item = Ext.get(target).select("option[@value='"+node.id+"']");
	if(item.elements.length > 0){		
		Ext.get(item.elements[0]).remove();
	}
	node.eachChild(remElem);
}

/* entsprechend hinzufuegen oder entfernen einer bestimmten Node in die/aus der Auswahllisten */
function switchElem(node,event){	
	if(Ext.get(target).select("option[@value='"+node.id+"']").elements.length)
		remElem(node);
	else
		addElem(node);
}

/* bestimmte Node entsprechen ihres Values aus der Selektbox entfernen */
function remElemBySelection(target){
	var tmp = document.getElementById(target);
	var id = tmp.options[tmp.selectedIndex].value;
	var fakeNode = document.createElement("tmpFakeNode");
	fakeNode.id = id;
	fakeNode.eachChild = function(){};
	remElem(fakeNode,target);
}

/* Die Anzahl in Klammern in der Selektbox bei wechsel der Radiobuttons aktualisieren */
function selectCount(selection){	 
	function changeText(node){
		node.setText(node.attributes[selection.value]);
		node.eachChild(changeText);
	}
	changeText(Ext.getCmp("tree").root);	
	var items = Ext.get(target).select("option").elements;
	for(i=0;i<items.length;i++){
		items[i].innerHTML = items[i].attributes[selection.value].value;
	}
}

/***********************************************/
/*Javascript zum anzeigen der Tabbars***********/
/***********************************************/

/* ID der zu erzeugenden Tabbar */
var tabbarID = 'resultTabbar';
/* ID des Suchformulars */
var searchform = 'searchform';
/* Funktionsname fuer die Zahlen */
var getCounts = 'ajaxCounts';
/* Funktionsname fuer das Ergebnis */
var getResult = 'ajaxList';

/* Tabpanel initialiseren falls noch nicht geschehen */
function navigatorSearch(){
	if(!Ext.getCmp(tabbarID)){
		new Ext.TabPanel({
			id: tabbarID,
			renderTo: 'result',
			hidden: true,
			items: [{
				id: 'companies',
				title: lieferantenTabHeadline,
				desc: lieferantenTabHeadline,
				uptodate: false,
				listeners: {activate: loadContent},
				cnt: 1,
				autoHeight: true,
				currentPage: 1,
				sorttype: 0,
				sortorder: 0
			},{
				id: 'products',
				title: produkteTabHeadline,
				desc: produkteTabHeadline,
				uptodate: false,
				listeners: {activate: loadContent},
				cnt: 1,
				autoHeight: true,
				currentPage: 1,
				sorttype: 0,
				sortorder: 0
			},{
				id: 'exhibitors',
				title: ausstellerTabHeadline,
				desc: ausstellerTabHeadline,
				uptodate: false,
				listeners: {activate: loadContent},
				cnt: 1,
				autoHeight: true,
				currentPage: 1,
				sorttype: 0,
				sortorder: 0
			},{
				id: 'markers',
				title: merkzettelTabHeadline,
				desc: merkzettelTabHeadline,
				uptodate: false,
				listeners: {activate: loadContent},
				cnt: 1,
				autoHeight: true,
				currentPage: 1,
				sorttype: 0,
				sortorder: 0
			}],
			listeners: {render: function(){this.setActiveTab(2);}},
			autoHeight: true
		});		
		Ext.get("resultTopline").dom.style.display = "block"
	}else{
		forceReload();
	}	
	
	Ext.Ajax.request({
		url: createUrl(getCounts),
		success: refreshTabCnts
	});
	
	/* DH / nbsp GmbH / 01.04.2009 / Automatisch den Messe-Tab ausblenden wenn die Messe nicht gerade stattfindet */
	var tabbar = Ext.getCmp(tabbarID);

	if(bShowTradeshowTab) {
		// Tabbar einfach anzeigen
		tabbar.show();
	}
	else {
		// Tab mit der Messe entfernen und danach anzeigen
		//var item = tabbar.items.items[2];
		var item = Ext.getCmp('exhibitors');
		tabbar.remove(item);
		tabbar.doLayout();
		tabbar.show();
	}
	
	
	
	
}	
var asdf='';
function refreshTabCnts(value){
	if(value.responseText.indexOf("{") < 0)
		return;
	var json = Ext.decode(value.responseText);
	
	var tabpanels = Ext.getCmp(tabbarID).items.items;
	for(i=0;i<tabpanels.length;i++){
		tabpanels[i].setTitle(tabpanels[i].desc + ' ('+ json[tabpanels[i].id] +')');
		tabpanels[i].cnt = json[tabpanels[i].id];
	}
	
	refreshHeadline(Ext.getCmp(tabbarID).getActiveTab());
}

/* id des Merkzettel Tabs um ihn auf uptodate=false setzen zu koennen */
var markerTabID = 'markers';
/* funktions name der methode die neue merkzettel hinzufuegt */
setMarkerFunc = 'ajaxSetMarkers';

function setMarker(markerID,del,datatype){
	if(Ext.getCmp(tabbarID))
		Ext.getCmp(tabbarID).getActiveTab().body.update("<div class='loading-indicator'>Loading...</div>");	

	//String fuern Ajax Request zusammenbauen
	var urlstring = createUrl(setMarkerFunc) + '&markerList='+markerID;
	
	if (typeof(datatype) != 'undefined')
		urlstring += "&datatype="+datatype;
	if (typeof(del) != 'undefined')
		urlstring += "&del="+del;	
	
	Ext.Ajax.request({
		url: urlstring,
		success: function(value){
			if(!Ext.get(tabbarID))
				return;
				
			refreshTabCnts(value);			
			forceReload();
		}
	});
}

function setSelectedMarkers(del){
	var serviceTag = Ext.getCmp(tabbarID).getActiveTab().id;
	var elements = Ext.getCmp(tabbarID).getActiveTab().getEl().select("input[@type='checkbox'][id!='" + serviceTag + "checkAllBox']").elements;
	var markerList = '';
	var datatypeList = '';
	for(i=0;i<elements.length;i++){
		if(elements[i].checked){
			if(markerList.length){
				markerList += ',';
				datatypeList += ',';
			}
			markerList += elements[i].id;
			datatypeList += elements[i].attributes.servicetag.nodeValue
		}		
	}
	if(markerList.length)
		setMarker(markerList,del,datatypeList);
}

function gotoPage(panel, nr){
	var url=createUrl(getResult, nr);
	panel.load({
		nocache: true,
		url: url
	});	
	panel.currentPage = nr;
	refreshHeadline(panel);
}

function nextPage(){
	gotoPage(Ext.getCmp(tabbarID).getActiveTab(),Ext.getCmp(tabbarID).getActiveTab().currentPage + 1);
}

function previousPage(){
	gotoPage(Ext.getCmp(tabbarID).getActiveTab(),Ext.getCmp(tabbarID).getActiveTab().currentPage - 1);
}

function pageNumber(nr){
	gotoPage(Ext.getCmp(tabbarID).getActiveTab(),nr);
}

/* Headline id */
var headID = 'navigator_listenUeberschrift_anzahlErg';

function refreshHeadline(tab){
	tmpText = headlineText;
	cnt = Ext.get(resPerPage).dom.value;
	to = cnt * tab.currentPage;
	from = to - cnt + 1;
	tmpText += (tab.cnt<from?tab.cnt:from) + '-' + (tab.cnt<to?tab.cnt:to) + ' ' + nav_von + ' ' + tab.cnt;
	document.getElementById(headID).innerHTML = tmpText;
}

function forceReload(){
	var tabpanels = Ext.getCmp(tabbarID).items.items;
	for(i=0;i<tabpanels.length;i++){
		tabpanels[i].uptodate = false;
	}
	loadContent(Ext.getCmp(tabbarID).getActiveTab());
}

function loadContent(panel){
	if(!panel.uptodate){
		gotoPage(panel, panel.currentPage);
		panel.uptodate = true;
	}else{
		refreshHeadline(panel);
	}
}

/* ids der formfelder */
var textfield = 'frmText';
var country = 'frmCountry';
var resPerPage = 'navigator_listenUeberschrift_ergProSeite';
var optionAll = 'suchbereich';
var optionProdComp = 'input_radio_prodcomp';

function createUrl(fn, page){
	rUrl = ajaxUrl + '&function=' + fn;		
	if(Ext.get(target)){
		rUrl += '&selectednomen=';	
		options = Ext.get(target).select("option").elements;
		for(i=0;i<options.length;i++){
			rUrl += options[i].value
			if(i<options.length-1)
				rUrl += ',';
		}
	}
	if(Ext.get(textfield)){
		rUrl += '&searchstring=' + encodeURIComponent(Ext.get(textfield).dom.value);
	}
	if(Ext.get(country))	
		rUrl += '&country=' + Ext.get(country).dom.value;	
	if(Ext.get(resPerPage))
		rUrl += '&resperpage=' + Ext.get(resPerPage).dom.value;
	if(Ext.get(tabbarID)){
		rUrl += '&servicetag=' + Ext.getCmp(tabbarID).activeTab.id;
		rUrl += '&sortorder=' + Ext.getCmp(tabbarID).activeTab.sortorder;
		rUrl += '&sorttype=' + Ext.getCmp(tabbarID).activeTab.sorttype;
	}
	/* optionbuttons fuer alles oder produkt/companyname */
	if(document.navigator){
		
		if (document.navigator.suchbereich[1].checked == true)
		{
			rUrl += '&suchbereich=1';
		} else {
			rUrl += '&suchbereich=0';
		}
	}
	if(page)
		rUrl += '&currentsite=' + page;	
	//document.getElementById("frmText").value=rUrl;
	return rUrl;
}

/* Ergebnisliste sortieren */
function orderBy(sorttype, sortorder){
	var tmpPanel = Ext.getCmp(tabbarID).getActiveTab();
	tmpPanel.sorttype = sorttype;
	tmpPanel.sortorder = sortorder;
	tmpPanel.uptodate = false;
	loadContent(tmpPanel);
}

/* Alle Checkboxen im aktuellen Tab an/abwaehlen */
function checkAll(checked){
	var serviceTag = Ext.getCmp(tabbarID).getActiveTab().id;
	var elements = Ext.getCmp(tabbarID).getActiveTab().getEl().select("input[@type='checkbox'][id!='" + serviceTag + "checkAllBox']").elements;
	checkValue = "";
	if(checked)
		checkValue = "checked";
	for(i=0;i<elements.length;i++){
		elements[i].checked = checkValue;
	}	
}

function boxChecked(checked){
	var serviceTag = Ext.getCmp(tabbarID).getActiveTab().id;
	if(!checked){
		Ext.get(serviceTag + 'checkAllBox').dom.checked='';
	}else{
		var elements = Ext.getCmp(tabbarID).getActiveTab().getEl().select("input[@type='checkbox'][id!='" + serviceTag + "checkAllBox']").elements;
		for(i=0;i<elements.length && elements[i].checked;i++)
			;
		if(i == elements.length){
			Ext.get(serviceTag + 'checkAllBox').dom.checked='checked';
		}else{
			Ext.get(serviceTag + 'checkAllBox').dom.checked='';
		}
	}
}


/***********************************************/
/*Spezielle Funktionen fuer Search Agent********/
/***********************************************/

function submitAgentForm(activate){
	document.forms.navigator.activate.value = activate;
	var options = document.forms.navigator.groups.options;
	for(i=0;i<options.length;i++){
		options[i].selected = true;
	}
	document.forms.navigator.submit();
}

/***********************************************/
/*Spezielle Funktionen fuer Hallenplan**********/
/***********************************************/

function hallPlanTabPanel(){
	new Ext.TabPanel({
		id: tabbarID,
		renderTo: 'hallplancontainer',
		items: [{
			id: 'overview',
			title: hallenplanUebersicht,
			autoHeight: true
		},{
			id: 'hall',
			title: hallenplanHallPlan,
			autoHeight: true,
			listeners:{render:function(pPanel){pPanel.body.update(tmpdave);createHallPanel();}},
			disabled: true
		},{
			id: 'markers',
			title: merkzettelTabHeadline,
			desc: merkzettelTabHeadline,
			uptodate: false,
			listeners: {activate: loadContent},
			cnt: 1,
			autoHeight: true,
			currentPage: 1,
			sorttype: 0,
			sortorder: 0,
			disabled: true
		}],
		listeners: {render: function(){this.setActiveTab(0);}},
		autoHeight: true
	});	
}

function loadPage(url, params){
	window.open('/_misc/popup/navigator/showDetails.cfm?'+ params,'','width=650,resizable=yes, scrollbars=yes, toolbar=yes');
}

function loadHallMap(){
	var tmpParams = '&function=ajaxHallPlan&hallid=' + Ext.get("hallid").dom.value;
	Ext.getCmp("hallImg").load({
		url: ajaxUrl + tmpParams
	});	
}

function createHallPanel(){
	new Ext.Panel({
		autoHeight: true,
		id: 'hallImg',
		renderTo: 'hallcontainer'
	});
}

/*** MISC ***/

function print_popup(params) {
	//window.open('/_misc/popup/navigator/print.cfm?'+params,'Print','width=650,resizable=yes, scrollbars=yes,');
	loadPage('',params+"&print=1&op=20");
}

function printSelected(){
	var serviceTag = Ext.getCmp(tabbarID).getActiveTab().id;
	var elements = Ext.getCmp(tabbarID).getActiveTab().getEl().select("input[@type='checkbox'][id!='" + serviceTag + "checkAllBox']").elements;
	var idList = '';
	var productIdList = '';
	var serviceTagList = '';
	for(i=0;i<elements.length;i++){
		if(elements[i].checked){
			if(idList.length){
				idList += ',';
				productIdList += ',';
				serviceTagList += ',';
			}
			idList += elements[i].id;
			productIdList += elements[i].getAttribute("productid");
			serviceTagList += elements[i].getAttribute("serviceTag");
		}
		
	}
	if(idList.length)
		print_popup('id='+idList+'&servicetag='+serviceTagList+'&productid='+productIdList);
}

function resetTargetList(){
	while(document.getElementById(target).firstChild)
		document.getElementById(target).removeChild(document.getElementById(target).firstChild);
}
