var ERROR_SHORT_KEY = -1;
var ERROR_NO_RESULTS = 0;

function LayerSwitcher()
{
	this.layers = {};
	this.layers['terrain'] 		= false;
	this.layers['roads'] 		= false;
	this.layers['borders'] 		= false;
	this.layers['buildings']	= false;
}

LayerSwitcher.prototype.toggle = function(layer,silent)
{
	var GLayer = null;
	var but = '';
	var txt = '';
	switch(layer)
	{
		case 'roads'		: txt = _h('layer_roads'); but = 'but_lay_roads'; GLayer = ge.LAYER_ROADS; break;
		case 'terrain'		: txt = _h('layer_terrain'); but = 'but_lay_terrain'; GLayer = ge.LAYER_TERRAIN; break;
		case 'borders'		: txt = _h('layer_borders'); but = 'but_lay_borders'; GLayer = ge.LAYER_BORDERS; break;
		case 'buildings'	: txt = _h('layer_buildings'); but = 'but_lay_buildings'; GLayer = ge.LAYER_BUILDINGS; break;
		default:			return;
	}
	var state = (this.layers[layer] ? false : true);
	this.layers[layer] = state
	ge.getLayerRoot().enableLayerById(GLayer, state);
	document.getElementById(but).innerHTML = (state ? _h('layer_disable') : _h('layer_enable')) + ' ' + txt;
}

var ls	= new LayerSwitcher();

function SideBar(container)
{
	this.container 		= container;
	this.content		= null;
	this.menus			= {};
	this.selCategory	= null;
	this.previousTabID	= undefined;
	this.currentTab		= '';
	this.searchRange	= 'global';
	this.searchKeyword	= '';
}

SideBar.prototype.insertSearchForm = function(container)
{
	if(!container)
		var container	= document.body;
	var form 			= document.createElement('form');
	form.id				= 'searchForm';
	form.enctype		= 'multipart/form-data';
	form.className		= 'search';
	form.acceptCharset	= 'UTF-8';
	form.sidebar		= this;
	form.onsubmit = function()
	{
		this.sidebar.search(this.sidebar.searchRange,document.getElementById('searchItem').value);
		return false;
	}
	var div = document.createElement('div');
	div.className		= 'go';
	div.sidebar 		= this;
	div.onclick = function()
	{
		this.sidebar.search(this.sidebar.searchRange,document.getElementById('searchItem').value);
		return false;
	}
	var input 	= document.createElement('input');
	input.id 	= 'searchItem';
	input.type	= 'text';
	
	form.appendChild(div);
	form.appendChild(input);
	form.appendChild(document.createElement('br'));
	var text = document.createTextNode(_h('searchform'));
	form.appendChild(text);
	container.appendChild(form);
	this.searchLabel = text;
}

SideBar.prototype.appendCategory = function(category,nobutton)
{
	var id = category.id;
	this.menus[id] = category;
	if(nobutton)
		this.menus[id].button = false;
	else
		this.menus[id].button = true;
}

SideBar.prototype.openTab = function(categoryID)
{
	opentab = categoryID;

	if(!opentab)
	{
		
		$('.sidebar_button').fadeOut(500);
		$('#sidebar_txt').fadeOut(500, function()
		{
			$('#buttons').fadeIn(500);
		});	
	}
	else
	{
		$('#buttons').fadeOut(500, function()
		{
			$('.sidebar_button').css('display','none');
			$('.sidebar_content').css('display','none');
			if(sidebar.currentTab == undefined || (opentab != 'search' && sidebar.currentTab != 'search'))
				$('#button_'+opentab).fadeIn(500);
			else
				$('#button_'+opentab).css('display','block');
			$('#content_'+opentab).css('display','block');
			$('#sidebar_txt').fadeIn(500);
		});
	}
	this.currentTab = categoryID;

	if(categoryID!='search' && categoryID!='tools')
		this.previousTabID = categoryID;
	
	if(categoryID && categoryID!='documents' && categoryID!='search')
		this.searchRange = categoryID;
	else if(!categoryID)
		this.searchRange = 'global';

	var label = ((this.searchRange == 'global' || this.searchRange == 'tools') ? document.createTextNode(_h('searchform')) : document.createTextNode(_h('searchform_cat')));
	this.searchLabel.parentNode.replaceChild(label,this.searchLabel);
	this.searchLabel = label;
}

SideBar.prototype.search = function(range,keyword)
{
	if(!keyword)
		var keyword = this.searchKeyword;
	else
		this.searchKeyword = keyword;
	var container = document.getElementById('content_search');
	while(container.hasChildNodes())
		container.removeChild(container.firstChild);
	var adres = 'search.php?lang=PL&what='+range+'&key='+keyword;
	var ul = document.createElement('ul');
	var li = document.createElement('li');
	li.className = 'r';
	var a = document.createElement('a');
	a.href='#';
	a.sidebar = this;
	a.className = 'r';
	a.onclick = function() { this.sidebar.openTab(this.sidebar.previousTabID); return false; };
	a.appendChild(document.createTextNode(_h('returntomenu')));
	li.appendChild(a);
	ul.appendChild(li);
	document.getElementById('content_search').appendChild(ul);
	var divResults = document.createElement('div');
	divResults.innerHTML = '<img src="images/indicator_flower.gif" alt="loading" />';
	divResults.id = 'search_results';
	divResults.sidebar = this;
	document.getElementById('content_search').appendChild(divResults);
	if(getSearchResults(keyword,range)==ERROR_SHORT_KEY)
		divResults.innerHTML = '<div class="noresults">'+_h('noresults')+'</div>';
	this.openTab('search');
}

SideBar.prototype.generate = function()
{
	this.insertSearchForm();
	var div 			= document.createElement('div');
	div.id 				= 'buttons';
	div.style.display	= 'block';
	for(var i in this.menus)
	{
		if(!this.menus[i].button)
			continue;
		var a = document.createElement('a');
		a.className 	= 'button';
		a.categoryID	= this.menus[i].id;
		a.sidebar		= this;
		a.href			= '#';
		a.onclick		= function() { this.sidebar.openTab(this.categoryID); return false; };
		var label		= document.createElement('span');
		label.innerHTML	= this.menus[i].name;
		a.appendChild(label);
		div.appendChild(a);
	}
	this.container.appendChild(div);
	
	var div	= document.createElement('div');
	div.id	= 'sidebar_txt';
	div.style.display = 'none';
	this.content = div;
		
	for(var j in this.menus)
	{
		var button 	= document.createElement('div');
		button.id	= 'button_'+this.menus[j].id;
		button.className = 'sidebar_button';
		button.style.display = 'none';
		var a = document.createElement('a');
		a.sidebar = this;
		a.href = '#';
		a.onclick = function() { this.sidebar.openTab(); return false; };
		var label = document.createElement('span');
		label.innerHTML = this.menus[j].name;
		a.appendChild(label);
		a.className = 'button_active';
		button.appendChild(a);
		this.container.appendChild(button);
		var div = document.createElement('div');
		div.id	= 'content_'+this.menus[j].id;
		div.className = 'sidebar_content';
		
		var ul = document.createElement('ul');
		var li = document.createElement('li');
		var a  = document.createElement('a');
		li.className = 'r';
		a.sidebar = this;
		a.onclick = function() { this.sidebar.openTab(); return false; };
		a.href = '#'
		a.className = 'r';
		a.appendChild(document.createTextNode(_h('returntomenu')));
		li.appendChild(a);
		ul.appendChild(li);
		div.appendChild(ul);
		
		for(var k=0; k<this.menus[j].fields.length; k++)
		{
			var list = document.createElement('ul');
			for(var l=0; l<this.menus[j].fields[k].items.length; l++)
			{
				var li = document.createElement('li');
				
				if(this.menus[j].fields[k].items[l].url || this.menus[j].fields[k].items[l].searchKeyword)
				{
					var a = document.createElement('a');
					if(!this.menus[j].fields[k].items[l].searchKeyword)
					{
						if(this.menus[j].fields[k].items[l].itemID)
							a.id 	= this.menus[j].fields[k].items[l].itemID;
						a.href 		= this.menus[j].fields[k].items[l].url || '#';
						if(this.menus[j].fields[k].items[l].url.indexOf('http://')==0)
							a.onclick 	= function() { var newWindow = window.open(this.href, "wrota_"+Math.random(),"status=1,toolbar=1,resizable=1,menubar=1,toolbar=1,scrollbars=1,width=800,height=600"); newWindow.focus(); return false; };
						else if(this.menus[j].fields[k].items[l].clickCallback)
							a.onclick 	= this.menus[j].fields[k].items[l].clickCallback;
						else
							a.onclick 	= function() { openPopUp(this.href); return false; };
					}
					else
					{
						a.href 		= '#';
						a.sidebar 	= this;
						if(this.menus[j].fields[k].items[l].itemID)
							a.id 	= this.menus[j].fields[k].items[l].itemID;
						a.keyword 	= this.menus[j].fields[k].items[l].searchKeyword;
						a.range		= this.menus[j].fields[k].items[l].searchRange || 'global';
						a.onclick 	= function() { this.sidebar.search(this.range,this.keyword); return false; };
					}
					a.appendChild(document.createTextNode(this.menus[j].fields[k].items[l].label));
					li.appendChild(a);
				}
				else
				{
					var p = document.createElement('p');
					p.appendChild(document.createTextNode(this.menus[j].fields[k].items[l].label));
					li.appendChild(p);
				}
				list.appendChild(li);
			}
			
			if(this.menus[j].fields[k].name)
			{
				var header = document.createElement('h3');
				header.appendChild(document.createTextNode(this.menus[j].fields[k].name));
				div.appendChild(header);
			}
	
			if(this.menus[j].fields[k].description)
			{
				var p = document.createElement('p');
				p.appendChild(document.createTextNode(this.menus[j].fields[k].description));
				div.appendChild(p);
			}
			div.appendChild(list);
		}
		this.content.appendChild(div);
	}
	this.container.appendChild(this.content);
}

SideBar.prototype.getCategory=function(id)
{
	return this.menus[id];
}

function MenuCategory(id,name)
{		
	this.sidebar 	= null;
	this.id			= id;
	this.name		= name;
	this.fields		= [];
}

MenuCategory.prototype.addTop5 = function(top5array)
{
	if(!top5array || !top5array[this.id])
		return;
	
	var field = new MenuField(_h('searchpopular'));
	for(var i=0;i<top5array[this.id].length;i++)
		field.addItem(new MenuItem(top5array[this.id][i]['query'],{searchRange: this.id, searchKeyword: top5array[this.id][i]['query']}));
	this.addField(field);	
}

function MenuField(name,description)
{
	this.name 			= name;
	this.items			= [];
	this.description	= description;
}

function MenuItem(name,options)
{
	if(!options)
		options = {};
		
	this.url			= options.url;
	this.clickCallback	= options.clickCallback;
	this.itemID			= options.itemID;
	this.classname		= options.classname;
	this.searchRange	= options.searchRange;
	this.searchKeyword	= options.searchKeyword;
	this.label			= name;
};

MenuField.prototype.addItem=function(item)
{
	this.items.push(item);
}

MenuCategory.prototype.addField=function(field)
{
	this.fields.push(field);
}

function getSearchResults(keyword,range)
{
	if((isNaN(keyword) && keyword.length<3 && range!='kms') || (range=='kms' && keyword.length<1))
		return ERROR_SHORT_KEY;
	var adres = '../search.php?lang='+WROTA_LANGUAGE+'&r='+Math.floor(Math.random()*1000000)+'&what='+range+'&key='+encodeURI(keyword)+'&format=latlon';
	GDownloadUrl(adres,function(xml)
	{
		var resultsCount = 0;
		var resultsTag = xml.documentElement;
		var results = xml.getElementsByTagName('result');//documentElement.getElementsByTagName('result');
		var html = '';
		var msg = (resultsTag.getAttribute("message")=='1' ? true : false);
		
		for(var j=0; j<results.length; j++)
		{
			var resultsType = results[j].getAttribute("type");
			var resultLabel = results[j].getAttribute("name");		
			var action 	= results[j].getElementsByTagName("actions");
			var top5_a	= results[j].getElementsByTagName("top5");
			var exact	= results[j].getElementsByTagName("exact");
			var part	= results[j].getElementsByTagName("part");
			var resultsNumber = 0;
			var tab_exact 	= (exact.length==1 ? exact[0].getElementsByTagName("place") : []);
			var tab_part 	= (part.length==1 ? part[0].getElementsByTagName("place") : []);
			resultsNumber += (tab_exact.length+tab_part.length);
			if(top5_a && top5_a.length==1)
			{
				var top5_items = top5_a[0].getElementsByTagName("item");
				if(top5_items.length>0) {
					top5[resultsType]=[];
					for(var i=0; i<top5_items.length; i++)
					{
						top5[resultsType].push({'query':top5_items[i].getAttribute("query"), 'hits': parseInt(top5_items[i].getAttribute("hits"))});
					}
				}
			}
			if(resultsNumber>0)
			{
				html+='<h3>'+resultLabel+'</h3>';

				if(action.length==1)
				{
					var infoWindowOnClick 	= parseInt(action[0].getAttribute("openonclick"));
					var openIndexedMarker 	= parseInt(action[0].getAttribute("indexedmarker"));
					var divideResults		= parseInt(action[0].getAttribute("dividegroups"));
					var drawPolyline		= parseInt(action[0].getAttribute("drawpolyline"));
				}
				else
				{
					var infoWindowOnClick 	= 0;
					var openIndexedMarker 	= 0;
					var divideResults		= 0;
					var drawPolyline		= 0;
				}
				var tagsToProcess = [{'tag':'exact', 'arr': tab_exact, 'label': _h('exactmatches')},{'tag':'part', 'arr': tab_part, 'label': _h('partmatches')}];
				for(var k=0; k<tagsToProcess.length; k++)
				{
					if(tagsToProcess[k]['arr'].length>0)
					{
						if(divideResults==1) html += tagsToProcess[k]['label']+' ('+tagsToProcess[k]['arr'].length+')';
						html+='<ul>';
						for(var i=0; i<tagsToProcess[k]['arr'].length; i++)
						{
							var name 	= tagsToProcess[k]['arr'][i].getAttribute("name");
							var type 	= tagsToProcess[k]['arr'][i].getAttribute("type");
							var id 		= tagsToProcess[k]['arr'][i].getAttribute("id");
							var lat		= tagsToProcess[k]['arr'][i].getAttribute("lat");
							var lon		= tagsToProcess[k]['arr'][i].getAttribute("lon");
							
							var range = parseInt(Math.random()*300+3400);
							if(type == 'n' || type == 'nr')
								range -= 2500;
							else if(type == 'm')
								range -= 2300;
							else if(type == 'k' || type=='r')
								range += 500;
							else if(type == 'umsa')
								range -= 2100;
							
							var opts	= {'range': range, 'name':name,'type':type,'id':id,'lat':lat,'lon':lon,'infowindow':infoWindowOnClick,'indexedmarker':openIndexedMarker};
							if(drawPolyline)
								opts['polyline'] = true;
							html+=formatSearchOutput(opts);
							resultsCount++;
						}
						html+='</ul>';
					}
				}
			}
		}
		if(resultsCount==0)
			html = '<p>'+_h('noresults')+'</p>';
		if(resultsCount < 10 && msg)
		{
			var text = _h('fewresults');
			text = text.replace(/{nazwa}/,results[0].getAttribute("name"));
			text = text.replace(/{link}/,'<a href="#" onclick="document.getElementById(\'search_results\').sidebar.search(\'global\'); return false;">');
			text = text.replace(/{\/link}/,'</a>');
			html += '<div class="fewresults">'+text+'</div>';
		}
		document.getElementById('search_results').innerHTML = html;
	});
	return false;
}

function formatSearchOutput(opts)
{
	var html = '';
	html += '<li><a href="#" onclick="lookAtView('+opts['lat']+','+opts['lon']+','+opts['range']+'); return false;">';
	html += opts['name'];
	html +='</a></li>';
	return html;
}
