RegisterNamespaces("API.GoogleMap");

API.GoogleMap = new function()
{
	var zoom=4,x=0,y=0,x1=0,y1=0,x2=0,y2=0,z=0,width,height,mapWidth=400,mapHeight=300,newObj=null,newObjType=null,drag=false,dragDx=0,dragDy=0,objects=[],lastInfo=null,sdh=['typ','lokalizacja','cena','l_pokoi','powierzchnia'],poi={},lParams='',fMaxRooms,fPrice=[],fMinPrice=null,fMaxPrice=null,fRooms,um=false,fArea=[],fMinArea=null,map=null,objMap=this,bIco={},oInf={},tWaluta,tPokoje,dto=null,mShowPoi=null;
	var poi = [];
	this.Move = function( direction )
	{
		SendForm( "move", direction );
	}

	this.Zoom = function( factor )
	{
		objMap.map.setZoom(factor);
		objMap.ShowObjects();

	}

	this.getGZoom = function()
	{
		return objMap.map.getZoom();
	}


	this.ZoomIn = function()
	{
		if(objMap.map.getZoom()<15)
		objMap.map.zoomIn();
		objMap.ShowObjects();
	}

	this.ZoomOut = function()
	{
		//if(objMap.map.getZoom()>12)
		objMap.map.zoomOut();
		objMap.ShowObjects();

	}



	this.NewObject = function(id,gx,gy,rooms,rooms2,area,area2,price,price2,height,width,file,city,state,address,desc,foto,dlakogo,atuty,oid,bid)
	{
		objects.push({'id':id,'oid':oid,'gx':gx,'gy':gy,'r':rooms,'r2':rooms2,'a':area,'a2':area2,'p':price,'p2':price2,'h':height,'w':width,'f':file,'c':city,'s':state,'t':address,'d':desc,'z':foto,'dlakogo':dlakogo,'atuty':atuty,'i':null,'v':null,'tv':null,'u':null,'tu':null,'bid':bid,'show':false});

	}

	this.ShowObjects = function()
	{
//		alert('wyw');
	//	document.getElementById("mypane").innerHTML = '';
		var newObj,o;
		bIco={};
		var sh = 0;
		for(i in objects)
		{
			o=objects[i];
			try
			{
				var icoNr = 1;
				if(		objMap.map.getZoom()==15)icoNr=5;
				else if(objMap.map.getZoom()==14)icoNr=4;
				else if(objMap.map.getZoom()==13)icoNr=3;
				else if(objMap.map.getZoom()==12)icoNr=2;
				else if(objMap.map.getZoom()==11)icoNr=1;
				else if(objMap.map.getZoom()==10)icoNr=1;
				else if(objMap.map.getZoom()==9)icoNr=1;
				else if(objMap.map.getZoom()==8)icoNr=1;
				else if(objMap.map.getZoom()==7)icoNr=1;
				else			 				icoNr=1;

			//	alert(o.f+icoNr);
				//alert(typeof objects[i].obj);
				//document.getElementById("mypane").innerHTML += sh+' '+i+': objprice ('+ typeof o.p + ') '+o.p+ ', filterpr ('+typeof fMaxPrice+') '+fMaxPrice;
				if( ( o.p>=fMinPrice && o.p<=fMaxPrice && ( o.r>=fRooms || !o.r || !fRooms ) && ( o.a>=fMinArea || !o.a || !fMinArea ) && null!==o.gx && null!==o.gy && typeof o.gx != 'undefined' && typeof o.gy != 'undefined' ) )//jezeli spelnia warunki filtow...
				{
					if ((typeof objects[sh].obj) == 'undefined') {
						var point = new GLatLng(o.gy,o.gx);
						//var obj=new createMarker(point,o.s,o.p,o.a,o.r,o.z,"200","151",o.f,o.w,o.h);
					//	document.getElementById("mypane").innerHTML += ' cr reason: '+typeof objects[i].obj;
						var obj=new createMarker(point,o.id,o.s,o.p,o.p2,o.a,o.a2,o.r,o.r2,o.z,"150","110",o.f+icoNr+'.png',o.w,o.h,o.gx,o.gy,o.dlakogo,o.atuty);
						objects[sh].obj = obj;
						// gdy przypiszemy pod zmienna 'i' niektore obiekt nie zapmietuja sie (?????)
					//	document.getElementById("mypane").innerHTML += ' now: '+typeof objects[i].obj;
						
					}
					if (!objects[sh].show) {
						objMap.map.addOverlay(objects[sh].obj);
						objects[sh].show = true;
					}
				//	document.getElementById("mypane").innerHTML += ' YES<br />';
					
				} else if (objects[sh].show) {
					//nie spelnia
				//	document.getElementById("mypane").innerHTML += ' NO';

					objMap.map.removeOverlay(objects[sh].obj);

					//	document.getElementById("mypane").innerHTML += ' not rem';

				//	document.getElementById("mypane").innerHTML += '<br />';
					objects[sh].show = false;
					
				}
				sh++;
				
				/*
				if(!objects[i].show)
				{
					sh++;
					if( ( o.p>=fMinPrice && o.p<=fMaxPrice && ( o.r>=fRooms || !o.r || !fRooms ) && ( o.a>=fMinArea || !o.a || !fMinArea ) && null!==o.gx && null!==o.gy && typeof o.gx != 'undefined' && typeof o.gy != 'undefined' ) )//jezeli spelnia warunki filtow...
					{
						//alert(objects.length);
						
						
						var point = new GLatLng(o.gy,o.gx);
						//var obj=new createMarker(point,o.s,o.p,o.a,o.r,o.z,"200","151",o.f,o.w,o.h);
							var obj=new createMarker(point,o.id,o.s,o.p,o.p2,o.a,o.a2,o.r,o.r2,o.z,"150","110",o.f+icoNr+'.png',o.w,o.h,o.gx,o.gy,o.dlakogo,o.atuty);

						objMap.map.addOverlay(obj);
						objects[i].obj = obj;
						objects[i].show = true;
					}
				}
				else
				{
					if( ( o.p>=fMinPrice && o.p<=fMaxPrice && ( o.r>=fRooms || !o.r || !fRooms ) && ( o.a>=fMinArea || !o.a || !fMinArea ) && null!==o.gx && null!==o.gy && typeof o.gx != 'undefined' && typeof o.gy != 'undefined' ) )//jezeli spelnia warunki filtow...
					{
						objMap.map.removeOverlay(objects[i].obj);
						objects[i].show = false;
						nh++;
						var point = new GLatLng(o.gy,o.gx);
						//var obj=new createMarker(point,o.s,o.p,o.a,o.r,o.z,"200","151",o.f,o.w,o.h);
						var obj=new createMarker(point,o.id,o.s,o.p,o.p2,o.a,o.a2,o.r,o.r2,o.z,"150","110",o.f+icoNr+'.png',o.w,o.h,o.gx,o.gy,o.dlakogo,o.atuty);

						objMap.map.addOverlay(obj);
						objects[i].obj = obj;
						objects[i].show = true;

					}else
					{
						objMap.map.removeOverlay(objects[i].obj);

						objects[i].show = false;
					}
				}
				*/
			//document.getElementById("mypane").innerHTML = "fMaxPrice: "+fMaxPrice+", poczatek, niepokazywane: "+sh+", pokazywane: "+nh;
			}
			catch(e){}
		}
	}

	this.ShowProperty = function(investID, nr ,id )
	{
		try
		{
			var oXmlHttp = zXmlHttp.createRequest();
			var ifr=document;
			var data;
			obj = ifr.getElementById("cont_"+investID);
			oXmlHttp.open("get","include/ajxGetProperty.php?id="+investID+"&n="+nr,true);
			oXmlHttp.onreadystatechange = function(){
				if(oXmlHttp.readyState == 4)  data= oXmlHttp.responseText;
				if(oXmlHttp.readyState == 2) obj.innerHTML='proszę czekać';
				obj.innerHTML='';

				obj.innerHTML+='<br /> trwa pobieranie danych, proszę czekać';

				if(data)
				{

					data=data.split(";");

					obj.innerHTML= createPropertyHTML(investID,data[0], data[1] ,data[2] , data[7]+" "+data[8], data[3], data[4], data[5] , data[6], 150, 110);
				}


			};
			oXmlHttp.send(null);

		}
		catch(e){}
	}
	this.SetPoi = function(objChk,kat)
	{

		var id = objChk.value;
		var state = objChk.checked;
		var area = objMap.map.getBounds();
		var SW = area.getSouthWest();
		var NE= area.getNorthEast();
		var x1 = SW.lng();
		var y1 = SW.lat();
		var x2 = NE.lng();
		var y2 = NE.lat();
		objChk.disabled=true;
		if(state)
		{

			if(!poi[id])
			{
				advAJAX.post({
					url: "include/ajax_POI.php?katid="+id+"&x1="+x1+"&y1="+y1+"&x2="+x2+"&y2="+y2,
					onSuccess : function(obj)
					{
						if(kat)
						{
							for(key2 in kat)
							{
								objMap.map.removeOverlay(kat[key2].obj);
							}
						}
						API.GoogleMap.ShowPOIKat(obj.responseText,id,state);
						objChk.disabled=false;
					}

				});
			}
			else
			{
				objChk.disabled=false;
				if(kat)
				{
					for(key2 in kat)
					{
						objMap.map.removeOverlay(kat[key2].obj);
					}
				}
				var cat = poi[id];
				for(key in cat){objMap.map.addOverlay(cat[key].obj); };
			}

		}else
		{
			objChk.disabled=false;
			if(poi[id])
			{
				kat = poi[id];
				for(key2 in kat)
				{
					objMap.map.removeOverlay(kat[key2].obj);
				}
			}
			poi[id]='';
		}
	}

	this.RefreshPoi = function()
	{
		var tmpPOI = poi;

		var cat ='';
		var  zoom = objMap.map.getZoom()
		if(13<=zoom && zoom<=16)
		{
			poi=[];
			$("poi_kat").style.display="";
		}else
		{
			$("poi_kat").style.display="none";
		}

		for(key in tmpPOI)
		{

			cat = tmpPOI[key];
			if(cat.length)
			{


				if(13<=zoom && zoom<=16)
				{
					API.GoogleMap.SetPoi({"value":key,"checked":true},cat);
				}
			}

		}
		factor = zoom
		$('imgZoom1').src='i/m_zb.gif';$('imgZoom2').src='i/m_zb.gif';$('imgZoom3').src='i/m_zb.gif';$('imgZoom4').src='i/m_zb.gif';
		if(factor==12)
		{$('imgZoom1').src='/i/m_zc.gif'}

		if(factor==13)
		{$('imgZoom2').src='/i/m_zc.gif'}

		if(factor==14)
		{$('imgZoom3').src='/i/m_zc.gif'}

		if(factor==15)
		{$('imgZoom4').src='/i/m_zc.gif';}

	}
	this.ShowPOIKat = function(data,catid,state)
	{
		//alert(state);
		var row ='';
		var point ='';
		var obj='';
		var typ='';
		//var mgrOptions = { borderPadding: 50, maxZoom: 16, minZoom: 13, trackMarkers: false };
		//var mgr = new GMarkerManager(objMap.map);
		data = data.split("#459#");
		//alert(objMap.map.getZoom());

		if(!poi[catid]) poi[catid] = '';
		var  zoom = objMap.map.getZoom()
		if(13<=zoom && zoom<=17)
		{

			if(state)
			{
				if(!poi[catid])
				{

					var tmp= [];
					for(var i=0; i<data.length; i++)
					{
						if(data[i].length>10)
						{
							row = data[i].split('^|^');
							typ = row[1];
							point = new GLatLng(row[3],row[2]);
							obj = 	new createPOI(point,row[7],row[9],row[5],row[6],'/i/c/'+row[1]+'_0.gif');
							objMap.map.addOverlay(obj);
							tmp[parseInt(row[0])]=({"typ":parseInt(catid),"obj":obj});
						}
					}

					poi[catid] = tmp;
				}else
				{

					var cat = poi[catid];
					for(key in cat){objMap.map.addOverlay(cat[key].obj);};
				}
			}
			else
			{
				var cat = poi[catid];

				for(key in cat)
				{

					objMap.map.removeOverlay(cat[key].obj);
				}
			}
		}
	}

	this.ShowPoi = function()
	{

		try
		{

			var ifr=GetIframeDocument(),imgs=ifr.getElementsByTagName("IMG"),id;
			for(var k=0; k<imgs.length; k++)
			{
				if((id=/smapTyp([0-9]+)s/.exec(imgs[k].className)[1]))
				{
					imgs[k].style.visibility = (poi[id]?'visible':'hidden');
				}
			}
		}catch(e){}
	}


	this.showDirections = function(x,y,a){
		
		directionsPanel = document.getElementById("dmap");
		//if (!window.directions) directions = new GDirections(objMap.map);
		directions.clear();
		directions.load("from: "+a+ " to: "+y+", "+x);
	
	}
	this.Init = function(y,x,zoom)
	{
		//lParams=params;
		if (GBrowserIsCompatible())
		{
			objMap.map = new GMap2(document.getElementById("map"));
			window.dirpane = document.getElementById('dirpane');
			window.ddistance = document.getElementById('ddistance');
			window.dtime = document.getElementById('dtime');
			if (!window.directions) directions = new GDirections(objMap.map);
			GEvent.addListener(objMap.map, "moveend", function() {
				API.GoogleMap.RefreshPoi();
			});

			//setInterval("",6000);
			//map.addControl(new GSmallMapControl());
			
			objMap.map.addControl(new GMapTypeControl());
			objMap.map.addControl(new GOverviewMapControl());
			objMap.map.addControl(new GScaleControl());
			objMap.map.setCenter(new GLatLng(y, x), zoom);
			GEvent.addListener(objMap.map, "moveend", function() {
				API.GoogleMap.RefreshPoi();
			});
			GEvent.addListener(directions, "load", function() {
				//document.getElementById('dirPane').innerHTML = directions.getDistance().html;
				//alert('Dystans: '+directions.getDistance().html+'\nCzas: '+directions.getDuration().html);
				dur = directions.getDuration().seconds;
				mins = Math.floor(dur/60);
				window.dirpane.style.display = 'block';
				window.ddistance.innerHTML = directions.getDistance().html;
				window.dtime.innerHTML = mins+' min';

			});
			
			GEvent.addListener(directions, "addoverlay", function() {
			var dir_markers = new Array();
			for ( var i = 0; i < directions.getNumGeocodes(); i++) {
				dir_markers[i] = directions.getMarker(i);
			}
			dir_markers[1].hide();
			});
			zoom =API.GoogleMap.getGZoom();
			if(13<=zoom && zoom<=16)
			{
				$("poi_kat").style.display="";
			}else
			{
				$("poi_kat").style.display="none";
			}
			factor = zoom
		$('imgZoom1').src='i/m_zb.gif';$('imgZoom2').src='i/m_zb.gif';$('imgZoom3').src='i/m_zb.gif';$('imgZoom4').src='i/m_zb.gif';
		if(factor==12)
		{$('imgZoom1').src='/i/m_zc.gif'}

		if(factor==13)
		{$('imgZoom2').src='/i/m_zc.gif'}

		if(factor==14)
		{$('imgZoom3').src='/i/m_zc.gif'}

		if(factor==15)
		{$('imgZoom4').src='/i/m_zc.gif';}

		}
	}

	this.SetMinPrice = function(id,i)
	{
		var r=false;
		if(fPrice[i]&&(fPrice[i]<=fMaxPrice||null==fMaxPrice))
		{
			fMinPrice=fPrice[i];
			if(document.all&&!window.opera)
			{
				if(dto)
				{
					window.clearTimeout(dto);
				}
				dto = window.setTimeout("$('s"+id+"').innerHTML="+fMinPrice,2);
			}
			else
			{
				$('s'+id).innerHTML = fMinPrice;
			}
			objMap.ShowObjects();
			if(fPrice.length>1)
			{
				r=true;
			}
		}
		return r;
	}

	this.SetMaxPrice = function(id,i)
	{
		var r=false;
		if(fPrice[i]&&(fPrice[i]>=fMinPrice||null==fMinPrice))
		{
			fMaxPrice=fPrice[i];
			//document.getElementById("mypane").innerHTML = "fMaxPrice: "+fMaxPrice+", i: "+i;
			//alert(fMaxPrice)
			if(document.all&&!window.opera)
			{
				if(dto)
				{
					window.clearTimeout(dto);
				}
				dto = window.setTimeout("$('s"+id+"').innerHTML="+fMaxPrice,2);
			}
			else
			{
				$('s'+id).innerHTML = fMaxPrice;
			}
			objMap.ShowObjects();
			if(fPrice.length>1)
			{
				r=true;
			}
		}
		return r;
	}

	this.SetRooms = function(id,i)
	{
		var r=false;
		if(i+1<=fMaxRooms)
		{
			fRooms=i+1;
			if(document.all&&!window.opera)
			{
				if(dto)
				{
					window.clearTimeout(dto);
				}
				dto = window.setTimeout("$('s"+id+"').innerHTML="+fRooms,2);
			}
			else
			{
				$('s'+id).innerHTML = fRooms;
			}
			objMap.ShowObjects();
			r=true;
		}
		return r;
	}

	this.SetFilers = function(price,rooms,area)
	{
		fPrice=price;
		fMaxRooms=rooms;
		fArea=area;
	}

	this.SetText = function(waluta,pokoje)
	{
		tWaluta=waluta;
		tPokoje=pokoje;
	}

	this.SetMinArea = function(id,i)
	{
		var r=false;
		if(fArea[i])
		{
			fMinArea=fArea[i];
			if(document.all&&!window.opera)
			{
				if(dto)
				{
					window.clearTimeout(dto);
				}
				dto = window.setTimeout("$('s"+id+"').innerHTML="+fMinArea,2);
			}
			else
			{
				$('s'+id).innerHTML = fMinArea;
			}
			objMap.ShowObjects();
			if(fArea.length>1)
			{
				r=true;
			}
		}
		return r;
	}
}
