var map; 
var info = '';
var marker = null;
var icon = null;
var language = null;
var geocoder = null;
var smallMarker, bigMarker; 
var smallMarkerArray = new Array();
var shortInfos = new Array();
var mapTrayShadow;
var mapTrayFloat;
var mapTryMarker;
var LAT = '';
var LNG = '';
var LAT_GO = '';
var LNG_GO = '';
var address = '', address2 = '';
var titleText = 'inframap.hu - ';
var PATH = '';

function createInfoLabel()
{
	var label=document.createElement('div');
	label.setAttribute('id','MAP_infoLabel');
	label.style.display = 'none';
	document.body.appendChild(label);
	label.style.position = 'absolute';
	label.style.color = '#f6f6f6';
	label.style.zIndex = 2;
	label.style.background = "url('../css/arrow_down.gif') bottom left no-repeat #555";
	label.style.height = '15px';
	label.style.fontSize = '7pt';
	label.style.whiteSpace = 'nowrap';	
	label.style.border = '#fff 1px solid';
	label.style.padding = '2px 8px 0px 8px';

	return label;
}

function showInfo(id, top, left, content)
{	
	var div = $(id);
	var txt = content.split('|');
	div.innerHTML =  txt[1] + ' ' + txt[2] + ' (' + txt[3] + ' méterre)' ;
	div.style.top = top + 'px';
	div.style.left =left + 'px';
	div.style.display = 'block';
}

function hideInfo(id)
{
	var div = $(id);
	div.style.display = 'none';					
}

// Alkalmazás inicializálása
function load() 
{
   if (GBrowserIsCompatible()) 
   {	  	  
      map = new GMap2(document.getElementById("map"));
      map.setCenter(new GLatLng(47.50143120349543, 19.044113159179688), 13); 
	  map.addControl(new GLargeMapControl());
   	  map.enableDoubleClickZoom();
	  map.enableContinuousZoom(); 

	  // infoLabel hozzáadása
	  mapTrayShadow = map.getPane(G_MAP_FLOAT_SHADOW_PANE);
	  mapTrayShadow.appendChild(createInfoLabel());	 	  
	  geocoder = new GClientGeocoder();		  
	  if(location.hash != '')
	  {		 
		  address = location.hash.substring(1,location.hash.length);
		  $('address').value = address;		  
		  showAddress(address, map.getZoom());		  
	  }
   }
}

function load_points(data, spec)
{	
   if(typeof spec == 'undefined') return;
   $('mapLoader').style.display = 'none';
   var datalength = data.length;	  
   var info = '';
   smallMarkerArray = new Array();   
   shortInfos = new Array();

   bounds = new GLatLngBounds(new GLatLng(spec.maxlat, spec.minlng), new GLatLng(spec.minlat, spec.maxlng));
   var zoom = map.getBoundsZoomLevel(bounds);
   zoom = (zoom < 6)? 6 : zoom-2;
   map.setZoom(zoom);  
  
   for(var i=0; i<datalength; i++)
   {			 
	  smallicon = new GIcon();  		 		 		  
	  smallicon.image = Utils.ROOT + '/css/' + data[i].mc + '.png';	  
	  smallicon.iconSize = new GSize(18,18);
	  smallicon.iconAnchor = new GPoint(9,9);		 		
		  		
	  info = data[i].id + '|' + data[i].type + '|' + data[i].optname + '|' + data[i].d;
	  shortInfos.push(info);

	  smallMarker = new GMarker(new GLatLng(data[i].lat , data[i].lng),{icon:smallicon});	
	  smallMarker.num = i;

	  GEvent.addListener(smallMarker, 'mouseover', function(){
		  var point = this.getLatLng();
		  var coords = map.fromLatLngToDivPixel(point);		  		  		  
	      hideInfo('MAP_infoLabel');
		  showInfo('MAP_infoLabel', parseInt(coords.y)-20, parseInt(coords.x)+3, shortInfos[this.num]);			  
	  });

	  GEvent.addListener(smallMarker, 'mouseout', function(){
		  hideInfo('MAP_infoLabel');
	  });

	  GEvent.addListener(smallMarker, 'dblclick', function(){
		  var txt = shortInfos[this.num].split('|');
		  var title = txt[1] + ' ' + txt[2];
		  if(!confirm(title + '\n' + $lang('error.report.confirm'))) return;
		  window.open('error/' + shortInfos[this.num].split('|')[0],'','width=500,height=700,resizable=no');
	  });
	  smallMarkerArray.push(smallMarker);
	  map.addOverlay(smallMarker);
   }	  	  
}

function setAddressSearchButton()
{
	$('addressSearch').onclick = function()
	{		
	    showAddress($('address').value,map.getZoom());
	}

	$('address').onkeypress = function(e)
	{
		if(this.value == '') return;	
		e || (e = window.event);
		var key;
		if(e.which)
		  key = e.which;
		else
		  key = e.keyCode; 		
		if(key == 13)
		{			
		    showAddress($('address').value,map.getZoom());
		}
	}
	$('address').focus();
}


function showAddress(address, zoom) 
{  	
	if($('address').value == '') return;
	geocoder.getLatLng(address, function(point)
	{      
		if (!point) 
		{        
			alert(address + '\n' + $lang('map.notFound'));      
		} 
		else 
		{ 			
			$('mapLoader').style.display = 'block';
			map.clearOverlays();
			map.setCenter(point, zoom);		
			
			if(marker)
			{
				map.removeOverlay(marker);
				marker = null;
			}

			icon = new GIcon();  		 		 		  
			icon.image = Utils.ROOT + '/css/marker_trans.gif';	  
			icon.iconSize = new GSize(21,21);
			icon.iconAnchor = new GPoint(10,10);		 				  			 
	 
			marker = new GMarker(point,{icon:icon});    
			map.addOverlay(marker);								
			LAT = point.y;
			LNG = point.x;			
			GDownloadUrl(Utils.ROOT + '/getpoints.php?lat=' + LAT + '&lng=' + LNG + '&address=' + encodeURIComponent(address), function(txt){
				try
				{
					var data = eval(txt);
					load_points(data[0], data[1][0]);
					load_list(address);
					setAddresses(data[2]);
				}
				catch(e)
				{
					$('mapLoader').style.display = 'none';
					alert($lang('nodata'));
				}
			});
			document.title = titleText + address;
		}
	});
}

function setAddresses(json)
{	
	var divs = $('address_layer').getElementsByTagName('div');
	for(var i=0; i<divs.length; i++)
	{
		if(divs[i].className.match('addressDistance'))
		{
			for(var j=0; j<json.length; j++)
			{				
				if(json[j].id == divs[i].id.split('_')[1])
				{
					divs[i].innerHTML = ' ' + json[j].d + ' ' + json[j].dim;
					divs[i].className = divs[i].className.replace('hidden','');
					break;
				}
			}
		}
		if(divs[i].className.match('addressText'))
		{
			divs[i].ondblclick = deleteOwnAddress;
		}
		if(divs[i].className.match('mapper'))
		{
			divs[i].onclick = function(e)
			{
				var src = Utils.getEventSource(e);
				var id = src.id.split('_')[1];
				address2 = $('addressText_' + id).innerHTML;					
				window.open('mapper','','width=700,height=500,resizable=no');
			}
		}
	}
}

function deleteOwnAddress(e)
{	
	var src = Utils.getEventSource(e);
	var id = src.id.split('_')[1];
	if(!confirm($lang('address.delete'))) return;
    var oXML = new FCKXml();
    oXML.LoadUrl(Utils.ROOT + '/deleteAddress.php?id=' + id,function(xml){ 
		if(xml.SelectSingleNode('doc/result').firstChild.nodeValue == 'Y')
		{
			src.parentNode.parentNode.removeChild(src.parentNode);
		}
	});
}

function setLogButtons()
{
	if($('loginButton'))
	{
		$('loginButton').onclick = function(e)
		{				
			$('loginbox').style.display = 'block';
			messageLightbox.show([$('loginbox'),260,160]);			
			return false;
		}
	}	

	if($('lostPassButton'))
	{
		$('lostPassButton').onclick = function(e)
		{						
			$('lostpassbox').style.display = 'block';
			messageLightbox.show([$('lostpassbox'),260,130]);
			return false;
		}
	}

	// Belépő box
	if($('loginButtonCancel'))
	{
		$('loginButtonCancel').onclick = function()
		{
			$('loginbox').style.display = 'none';
			messageLightbox.hide();
		}
	}

	if($('loginButtonOk'))
	{
		$('loginButtonOk').onclick = function()
		{			
		}
	}


	// Lostpass box
	if($('lostpassButtonCancel'))
	{
		$('lostpassButtonCancel').onclick = function()
		{
			$('lostpassbox').style.display = 'none';
			messageLightbox.hide();
		}
	}

	if($('lostpassButtonOk'))
	{
		$('lostpassButtonOk').onclick = function()
		{			
		}
	}
}

// Lista betöltése
function load_list(address)
{	
	$('searchLayer').innerHTML = '';
	$('addressList_loader').style.display = 'block';	
	var pageList = new listLoader(Utils.ROOT + '/getpoints_xml.php?lat=' + LAT + '&lng=' + LNG + '&address=' + address, Utils.ROOT + '/templates/addresslist.xsl', 'searchLayer', showList);
	pageList.load('addressList_loader');	
}

function showList(fragment, parentObj, id)
{				
	var page = $(parentObj);
	$('addressList_loader').style.display = 'none';
	page.innerHTML = fragment;
	page.style.display = 'block';
	FadeIn(page,1);	
	setOpener();
	setShowPoints();
	setCheckBoxes();
	setDefaultMap();
}

function setDefaultMap()
{
	$('defaultMap').className = $('defaultMap').className.replace('hidden','');
	$('defaultMap').onclick = function()
	{
		map.setCenter(new GLatLng(LAT,LNG));
	}
}

function setAddressFormSend()
{
	$('addressFormSend').onclick = function()
	{
		if($('newaddress').value == '' || LAT == '' || LNG == '') return;
		$('addressFormLoader').className = $('addressFormLoader').className.replace(' hidden','');
		$('addressLoaderText').className = $('addressLoaderText').className.replace(' hidden','');
		var get = 'address=' + encodeURIComponent($('newaddress').value) + '&lat=' + LAT + '&lng=' + LNG; 
	    var oXML = new FCKXml();
		oXML.LoadUrl(Utils.ROOT + '/decodeAddress.php?' + get,function(xml){
			$('addressFormLoader').className += ' hidden'; 
			$('addressLoaderText').className += ' hidden';
			var errors = xml.SelectNodes('doc/error');
			if(errors.length)
			{
				alert($lang(errors[0].firstChild.nodeValue));
			}
			else
			{
				if((xml.SelectNodes('doc/exists')).length) return;
				var parent = document.createElement('div');
				parent.className = 'addressItem';
				var title = document.createElement('div');
				title.className = 'addressText';
				title.id = 'addressText_' + xml.SelectSingleNode('doc/id').firstChild.nodeValue;
				title.innerHTML = $('newaddress').value;
				title.ondblclick = deleteOwnAddress;
				$('newaddress').value = '';
				var dist = document.createElement('div');
				dist.className = 'addressDistance';
				dist.id = 'addressDistance_' + xml.SelectSingleNode('doc/id').firstChild.nodeValue;
				dist.innerHTML = xml.SelectSingleNode('doc/distance').firstChild.nodeValue;
				dist.innerHTML += ' ' + xml.SelectSingleNode('doc/dim').firstChild.nodeValue;
				var clear = document.createElement('div');
				clear.className = 'clear';
				
				parent.appendChild(title);
				parent.appendChild(dist);
				parent.appendChild(clear);
				var before = null;
				var divs = $('myPointsHolder').getElementsByTagName('div')
				{
					for(i=0; i<divs.length; i++)
					{
						if(divs[i].className.match('addressItem'))
						before = divs[i];
						break;
					}
				}
				if(!before)
				{
					$('myPointsHolder').appendChild(parent);
				}
				else
				{
					$('myPointsHolder').insertBefore(parent, before);
				}
			}
		});
	}
}

function setOwnAddresses()
{
	var divs = $('myPointsHolder').getElementsByTagName('div');
	for(var i=0; i<divs.length; i++)
	{
		if(divs[i].className.match('addressText') || divs[i].className.match('addressDistance'))
		{
			divs[i].ondblclick = deleteOwnAddress;
		}
	}
}

function getSWF(movieName)
{
    if (navigator.appName.indexOf("Microsoft") != -1)
    {
        return window[movieName];
    }
    else
    {
        return document[movieName];
    }
}

function printAdresses()
{
	$('addressFormPrint').onclick = function()
	{
		if(LAT == '' || LNG == '') return;
		getSWF('printer').callPrint();	
	}
}

window.onload = function()
{  	
   var oXML = new FCKXml();
   oXML.LoadUrl(Utils.ROOT + '/data/language_hu.xml',function(xml){ 
	  language = xml;
	  setTabs();
	  setPointSearch();	  
	  setAddressSearchButton();
	  createInfoLabel();
	  setNextPoint();
	  typeLoader();
	  load();
	  setLogButtons();
	  setAddressFormSend();
	  setOwnAddresses();
	  printAdresses();

	  messageLightbox.init();
	  if($('loginform'))
	  {
		   var loginFormSubmitter = new formSubmitter('loginform','login_form_loader', Utils.ROOT + '/login.php');
		   loginFormSubmitter.setLangPrefix('login.error.');	
		   loginFormSubmitter.method = 'login';
		   loginFormSubmitter.showSuccessMessage = false;
		   loginFormSubmitter.doAtSuccess = function()
		   {
			   messageLightbox.hide();
			   $('loginbox').style.display = 'none';
			   location.reload(true);
		   }
	  }

	  if($('lostpassform'))
	  {
		   var lostpassFormSubmitter = new formSubmitter('lostpassform','lostpass_form_loader', Utils.ROOT + '/newPass.php');
		   lostpassFormSubmitter.setLangPrefix('lostpass.error.');	
		   lostpassFormSubmitter.method = 'lostpass';
		   lostpassFormSubmitter.doAtSuccess = function()
		   {
			   $('lostpassbox').style.display = 'none';
			   messageLightbox.hide();
		   }
	  }
	  
	  var flashvars = {};							
	  var params = {wmode:'window',bgcolor:'#ffffff',allowScriptAccess:'sameDomain'};
	  var attributes = {id:'prnter'};
	  swfobject.embedSWF("../flex/print.swf", "contactbox", 1, 1, "9.0.0","../flex/expressInstall.swf", flashvars, params, attributes);

	  var flashvars = {};						
	  var params = {wmode:'window',bgcolor:'#ffffff',allowFullscreen:true,allowScriptAccess:'sameDomain'};
	  var attributes = {id:'contact'};
	  swfobject.embedSWF("../flex/contact.swf", "contactbox", 105, 20, "9.0.0","../flex/expressInstall.swf", flashvars, params, attributes);
   })
}

window.onunload = function()
{
	GUnload();
}