var _maplib_icons=[];
var _maplib_info=[];
var _maplib_legend=0;
var _maplib_admin=0;
var _marker=0;
var _maplib_id=0;
var map;

createBasicIcon();

function mapLib_Start(mapid,container,iz,mz,lat,lng,level,admin,marker,_full)
{
			 map = new GMap(container,{mapTypes:[]});

			map.overlays = []; 
			GEvent.addListener(map,'addoverlay',function(o){ 
					this.overlays.push(o); 
			});

			GEvent.addListener(map,'removeoverlay',function(o){ 
					for(var i = 0; i < this.overlays.length; i++) 
							if(this.overlays[i] === o) 
									return this.overlays.splice(i,1); 
			}); 

			GEvent.addListener(map,'clearoverlays',function(){ 
					this.overlays = []; 
			}); 

			  var copyright = new GCopyright(1,new GLatLngBounds(new GLatLng(lat, lng),new GLatLng(lat, lng) ),14, "MapLib.net");
			  var copyrightCollection = new GCopyrightCollection('Map Data:');
			  copyrightCollection.addCopyright(copyright);

			  var tilelayers = [new GTileLayer(copyrightCollection,7,17-iz)];
			  tilelayers[0].getTileUrl = function(a,b){
				  return "tiles/"+mapid+"/"+a.x+"_"+a.y+"_"+(17-b)+".gif";
			  }
			  
			  var custommap = new GMapType(tilelayers, G_NORMAL_MAP.getProjection(), "MapLib");
			  map.addMapType(custommap);
			  map.setMapType(custommap);
			  map.setCenter(new GLatLng(lat,lng),level,custommap);
			  //omap=new GOverviewMapControl(new GSize(200,200));
			 // map.addControl(omap);
			  //omap.hide(true);

			  if (!(_full>0))
			  _maplib_initialize(mapid);

			  _maplib_id=mapid;
			  _maplib_admin=admin;

			  var m_doc=document.getElementsByTagName('body').item(0);
			  var js = document.createElement('div');
			  js.setAttribute('id', 'powered_by_maplib');
			  js.innerHTML="<a href='http://www.maplib.net/' target='_blank' title='MapLib.net - Enabling New Ways of Viewing Pictures'><img src='http://www.maplib.net/images/poweredby.png' border='0' onload='pngfix(this)'></a>";
			  m_doc.appendChild(js);

			  var pos2= new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(64,0));
			  pos2.apply(document.getElementById("powered_by_maplib"));
			  map.getContainer().appendChild(document.getElementById("powered_by_maplib"));
			  map.addControl(new GLargeMapControl());
			  _maplib_admin=admin;

			  var pos3= new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(50,5));
			  pos3.apply(document.getElementById("_search_area"));
			  map.getContainer().appendChild(document.getElementById("_search_area"));

			  _marker=marker;
			  getMarkers(mapid,'',1,_full);
}

function getMarkers(mapid,kw,page,full)
{
	  map.clearOverlays();
	  GEvent.clearListeners(map,'click');
	  GEvent.clearListeners(map,'mousemove');

	  if (kw==null)
	  {
		  kw='';
	  }

	if (!(full>0))
	{
		var url="action.php?action=get_markers_list&kw="+kw+"&page="+page+"&mapid="+mapid+"&marker="+_marker+rand();
		var pars;
		new Ajax.Updater('panel', url, {method: 'get', parameters: pars,onFailure: failure,onLoading:loading,onComplete:done});
	}

	createMarkers(mapid,kw,page);
}


function createMarkers(mapid,kw,page)
{
	var url="action.php?action=get_markers_xml&kw="+kw+"&page="+page+"&mapid="+mapid+rand();
	GDownloadUrl(url, function(data, responseCode) {

		var xml = GXml.parse(data);

		var markerss = xml.documentElement.getElementsByTagName("marker");

		for (var i = 0; i < markerss.length; i++) {
			if (parseFloat(markerss[i].getAttribute("stype"))==0)
			{
				createMarker(new GLatLng(parseFloat(markerss[i].getAttribute("latitude")), parseFloat(markerss[i].getAttribute("longitude"))),markerss[i].getAttribute("id"),markerss[i].getAttribute("title"),markerss[i].getAttribute("introduction"),0,markerss[i].getAttribute("iconid"),markerss[i].getAttribute("iwidth"),markerss[i].getAttribute("iheight"),markerss[i].getAttribute("user"),1,markerss[i].getAttribute("zoom"),markerss[i].getAttribute("sdate"));
			} else

			if (parseFloat(markerss[i].getAttribute("stype"))==1)
			{
				createPolyline(new GLatLng(parseFloat(markerss[i].getAttribute("latitude")), parseFloat(markerss[i].getAttribute("longitude"))),markerss[i].getAttribute("id"),markerss[i].getAttribute("title"),markerss[i].getAttribute("introduction"),0,markerss[i].getAttribute("user"),markerss[i].getAttribute("zoom"),markerss[i].getAttribute("data"),markerss[i].getAttribute("_line_color"),markerss[i].getAttribute("_line_width"),markerss[i].getAttribute("sdate"));
			} else

			if (parseFloat(markerss[i].getAttribute("stype"))==2)
			{
				createPolygon(new GLatLng(parseFloat(markerss[i].getAttribute("latitude")), parseFloat(markerss[i].getAttribute("longitude"))),markerss[i].getAttribute("id"),markerss[i].getAttribute("title"),markerss[i].getAttribute("introduction"),0,markerss[i].getAttribute("user"),markerss[i].getAttribute("zoom"),markerss[i].getAttribute("data"),markerss[i].getAttribute("_line_color"),markerss[i].getAttribute("_line_width"),markerss[i].getAttribute("_line_opacity"),markerss[i].getAttribute("_fill_color"),markerss[i].getAttribute("_fill_opacity"),markerss[i].getAttribute("sdate"));
			}

		}
	});
}


function createPolyline(point,markerid,tooltip,html,active,user,z,data,lc,lw,sdate)
{
	map.setCenter(point,z);

	var marker=new GPolyline(data.parseJSON(),lc,lw);
	marker.id=markerid;
	marker.group=1;

	if (!_maplib_info[markerid])
	{
		_maplib_info[markerid]=generateInfo(html,tooltip,user,sdate);
	}
 
	  GEvent.addListener(marker, "click", function() {
		  marker.getVertex(0).openInfoWindowHtml(_maplib_info[markerid]);
	  });

	 map.addOverlay(marker);

	 if (_maplib_admin>0)
	 {
		 marker.enableEditing({onEvent: "mouseover"});
		 marker.disableEditing({onEvent: "mouseout"});

	   GEvent.addListener(marker, "lineupdated", function() {
		   
		   var _maplib_pts=[];
		   for (var i=0;i<marker.getVertexCount();i++ )
		   {
			   _maplib_pts.push(marker.getVertex(i));
		   }

		   var url="action.php?action=update_polyline&markerid="+markerid+"&data="+_maplib_pts.toJSONString()+"&mapid="+_maplib_id+rand();
		   ajaxRequest(url,null);
	   });

	 }

	return marker;

}

function createPolygon(point,markerid,tooltip,html,active,user,z,data,lc,lw,lo,fc,fo,sdate)
{
	map.setCenter(point,z);

	var marker=new GPolygon(data.parseJSON(),lc,lw,lo/100,fc,fo/100);
	marker.id=markerid;
	marker.group=2;

	if (!_maplib_info[markerid])
	{
		_maplib_info[markerid]=generateInfo(html,tooltip,user,sdate);
	}
 
	  GEvent.addListener(marker, "click", function() {
		  marker.getVertex(0).openInfoWindowHtml(_maplib_info[markerid]);
	  });

	 map.addOverlay(marker);

	 if (_maplib_admin>0)
	 {
		 marker.enableEditing({onEvent: "mouseover"});
		 marker.disableEditing({onEvent: "mouseout"});

	   GEvent.addListener(marker, "lineupdated", function() {
		   
		   var _maplib_pts=[];
		   for (var i=0;i<marker.getVertexCount();i++ )
		   {
			   _maplib_pts.push(marker.getVertex(i));
		   }

		   var url="action.php?action=update_polyline&markerid="+markerid+"&data="+_maplib_pts.toJSONString()+"&mapid="+_maplib_id+rand();
		   ajaxRequest(url,null);
	   });

	 }

	return marker;

}

function createMarker(point,markerid,tooltip,html,active,iconid,iw,ih,user,z,sdate) 
{
	
	if (!_maplib_icons[iconid])
	{
		createIcon(iconid,iw,ih);
	}


	var marker = new GMarker(point,{icon:_maplib_icons[iconid],title:tooltip,draggable:true});

	marker.id=markerid;
	marker.group=0;

	if (_maplib_admin==0)
	{
		marker.disableDragging();
	} else
	{
		  GEvent.addListener(marker, "dragend", function(){

			  var url="action.php?action=update_marker_position&id="+marker.id+"&lat="+marker.getLatLng().lat()+"&lng="+marker.getLatLng().lng()+"&z="+map.getZoom()+rand();
			  ajaxRequest(url,null);
		  });
	}
	
	if (!_maplib_info[markerid])
	{
		_maplib_info[markerid]=generateInfo(html,tooltip,user,sdate);
	}
	
  GEvent.addListener(marker, "click", function() {
	marker.openInfoWindowHtml(_maplib_info[markerid]);
  });

  map.addOverlay(marker);
  return marker;

}

function failure()
{
	alert("request failure");
}

function loading()
{
}

function done()
{
}

function createBasicIcon(){
	_maplib_icons.basic = new GIcon();
	_maplib_icons.basic.image = "icons/default.png";
	_maplib_icons.basic.iconSize = new GSize(12,20);
	_maplib_icons.basic.iconAnchor = new GPoint(6,20);
	_maplib_icons.basic.infoWindowAnchor = new GPoint(5,1);
	_maplib_icons.basic.imageMap = [5,0, 1,4, 1,8, 3,12, 5,20, 7,20, 8,12, 11,8, 11,4, 7,0];
}

function createIcon(iconid,iw,ih)
{
	_maplib_icons[iconid]=new GIcon(_maplib_icons.basic,iconid);
	_maplib_icons[iconid].iconSize = new GSize(iw,ih);
	_maplib_icons[iconid].iconAnchor = new GPoint(6,20);
}

function generateInfo(html,tooltip)
{
	html=html.replace(/\[b\](.*?)\[\/b\]/i,"<strong>$1</strong>");
	html=html.replace(/\[i\](.*?)\[\/i\]/i,"<em>$1</em>");
	html=html.replace(/\[u\](.*?)\[\/u\]/i,"<u>$1</u>");
	html=html.replace(/\[img\](.*?)\[\/img\]/i,"<img src='$1' />");
	html=html.replace(/\[url\](.*?)\[\/url\]/i,"<a href='$1' target='_blank'>$1</a>");
	html=html.replace(/<a /i,"<a target='_blank' ");

	html2="<div style='width: 200px;'><b>"+tooltip+"</b><br><hr noshade color='#3399FF' size='1' width='180' align='left'>"+html;
	html2=html2+"<br></div>";
	return html2;
}


function locate(x,y,z,markerid,stype)
{
	map.closeInfoWindow();
	map.panTo(new GLatLng(x, y));
	map.setZoom(z);
	for (var x=0;x<map.overlays.length;x++) 
	{
		if ((map.overlays[x].id==markerid)&&(map.overlays[x].group==stype))
		{
			if (map.overlays[x].group>0)
			{
				map.openInfoWindowHtml(map.overlays[x].getVertex(0),_maplib_info[markerid]);
			} else
				map.overlays[x].openInfoWindowHtml(_maplib_info[markerid]);
		}
	}
}


function filtMarkers(gid)
{
	map.closeInfoWindow();


	for (var x=0;x<map.overlays.length;x++) 
	{
		if (map.overlays[x].group==gid)
		{
			if (_maplib_legend>0)
			{
				map.overlays[x].show();
			} else
			{
				map.overlays[x].hide();
			}
		}
	}

	if (document.getElementById('tbl_marker_list').rows.length>2)
	{
		var tdlist=document.getElementById('tbl_marker_list').getElementsByTagName('tr');
			 for (j=0; j<tdlist.length;j++)
			{
				 if (tdlist[j].id.indexOf('-'+gid)>0)
				 {
	
					 if (_maplib_legend>0)
					 {
						 tdlist[j].style.display="block";
					 } else
					 {
						 tdlist[j].style.display="none";
					 }
				 }
			}
	}

	_maplib_legend=1-_maplib_legend;
}

function frm_edit_marker(mid,stype)
{
	var url="action.php?action=frm_edit_marker&mid="+mid+rand();
	ajaxUpdate("panel",url,null);
	//generate_wysiwyg('_maplib_desc',400,200);
	WYSIWYG.attach('_maplib_desc', small);

	if (stype==0)
	{
		var url="icons.php?";
		ajaxUpdate("panel_icons",url,null);
	}

	if (stype>0)
	{
		cp1 = new ColorPicker('window');
		cp2 = new ColorPicker('window');
	}
}

function edit_poly(mid)
{
	updateTextArea("_maplib_desc");
	ajaxPost("panel_after_post","action.php","frm_post_poly");
	window.location='editmarker.php?mid='+mid;
}

function invoke_frm_addPoint(mapid)
{
  var url="action.php?action=frm_addpoint&mapid="+mapid+rand();
  var pars="";

   GEvent.addListener(map, "click", function(marker, point) {
	  document.getElementById('longitude').value=point.lng();
	  document.getElementById('latitude').value=point.lat();
	  document.getElementById('maplib_info').innerHTML='';
	  map.addOverlay(new GMarker(point));
  });

  var myajax=new Ajax.Updater('panel', url, {method: 'get', asynchronous: false, parameters: pars,onFailure: failure,onLoading:loading,onComplete:done});
  //generate_wysiwyg('introduction');
  WYSIWYG.attach('introduction', small);
}

function rand()
{
	return "&rand="+(Math.random()*Math.random());
}

function rand2()
{
	return "?rand="+(Math.random()*Math.random());
}

function toggleMarker(param,mapid)
{
  updateTextArea("introduction");
  var url="action.php"+rand2();
  document.getElementById('param').value=param;
  document.getElementById('zoom').value=map.getZoom();
  document.getElementById('maplib_info').innerHTML='';
  
  if (param!=3)
  {
	  if (document.getElementById('title').value=='')
	  {
		document.getElementById('maplib_info').innerHTML='title required';
	  } else
	  if (document.getElementById('longitude').value!='0')
	  {
		var myAjax = new Ajax.Updater('panel', url, {method: 'post',asynchronous: false, parameters: Form.serialize("frm_toggle_marker"),onFailure: failure,onLoading:loading,onComplete:done});
		if (param==2)
		{
			getMarkers(mapid,'',1);
		} else
		  {
			//generate_wysiwyg('introduction');
			WYSIWYG.attach('introduction', small);
		  }
	  }
	  else
	  document.getElementById('maplib_info').innerHTML='Please click a place on the map';
  } else
	{
	  var myAjax = new Ajax.Updater('panel', url, {method: 'post',asynchronous: false, parameters: Form.serialize("frm_toggle_marker"),onFailure: failure,onLoading:loading,onComplete:done});
	  //generate_wysiwyg('introduction');
	  WYSIWYG.attach('introduction', small);
	}
}

function dialog() {
  Dialog.alert({url: "icons.php"+rand2(), options: {method: 'get'}}, 
               {windowParameters: {className: "alphacube", width:320, height:320}, okLabel: "close", 
                ok:function(win) {Dialog.closeInfo();return true;}, cancel:function(win) { Dialog.closeInfo();return true;}});
}

function switchIcon(img)
{
	document.getElementById('layer_icon').innerHTML='<img src="'+img+'" border="0">';
	document.getElementById('icon_id').value=img;
	Dialog.closeInfo();
}

var panelToggled=null;
function togglePanel()
{
	if (panelToggled)
	{
	  document.getElementById('tdPanel').style.display="block";
	  document.getElementById('togglePanelImg').innerHTML="<img border='0' src='images/hide-arrow.png'";
	  panelToggled=null;
	} else
	{
		document.getElementById('tdPanel').style.display="none";
		document.getElementById('togglePanelImg').innerHTML="<img border='0' src='images/show-arrow.png'";
		panelToggled=true;
	}
}

function countDown(secs,surl){ 
 if(--secs>0){
     setTimeout("countDown("+secs+",'"+surl+"')",1000); 
     }
 else{
   
     location.href=surl;
     }  
 }

function ajaxUpdate(dest,url,pars) {
	
	url=url+rand();
	new Ajax.Updater(dest, url, {method: 'get', asynchronous: false, parameters: pars,onFailure: ajaxFailure,onLoading:ajaxLoading,onComplete:ajaxDone});
}

function ajaxRequest(url,form) {
	
	url=url+rand();
	if (form==null)
	{
		new Ajax.Request(url,{method: 'get', asynchronous: false, parameters: null,onFailure: ajaxFailure,onLoading:ajaxLoading,onComplete:ajaxDone});
	} else
		new Ajax.Request(url,{method: 'get', asynchronous: false, parameters: Form.serialize(form),onFailure: ajaxFailure,onLoading:ajaxLoading,onComplete:ajaxDone});
}

function ajaxPost(dest,url,form) {
	new Ajax.Updater(dest, url, {method: 'post',asynchronous: false, parameters: Form.serialize(form),onFailure: ajaxFailure,onLoading:ajaxLoading,onComplete:ajaxDone});
}

function ajaxFailure() {
}

function ajaxLoading() {
}


function ajaxDone(o) {
}