var _maplib_icons=[];
var _maplib_info=[];
var _maplib_legend=0;
var map;

createBasicIcon();

var base_dir = '/admissions/map/';

function mapLib_Start(mapid,container,maxzoom,minzoom,lat,lng,level)
{

    if (!GBrowserIsCompatible())
        return;
    
    var copy_year = 2008;
    var this_year = new Date().getFullYear();
    
    if (copy_year < this_year) copy_year = copy_year + ' - ' + this_year;
    
    var copyright = new GCopyright(1, new GLatLngBounds( new GLatLng(-58, 33), new GLatLng(-52, 44) ),minzoom, "Map Images &copy; " + copy_year + " Copyright Anderson University");
    var copyrightCollection = new GCopyrightCollection('');
    copyrightCollection.addCopyright(copyright);
    
    var tilelayers = [new GTileLayer(copyrightCollection, minzoom, maxzoom)];
    tilelayers[0].isPng = function(){ return true; };
    tilelayers[0].getOpacity = function(){ return 1.0; };
    tilelayers[0].getTileUrl = function(coord,zoom){
      return base_dir + "tiles/"+mapid+"/"+zoom+'/'+coord.x+"_"+coord.y+".png";
    }
    
    var custommap = new GMapType(tilelayers, new GMercatorProjection(11), "MapLib");
    map = new GMap2(container, {mapTypes:[custommap]});
    
    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 = []; 
    }); 

    map.enableScrollWheelZoom();
    
    //map.addMapType(custommap);
    
    map.setCenter(new GLatLng(lat,lng),level,custommap);
    
    omap=new GOverviewMapControl(new GSize(160,160));
    map.addControl(omap);
    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());
    
    /*
    * legend
    */
    if (document.getElementById("maplegendcontainer")) {
        var legend_control = new GControl();
        legend_control.initialize = function(theMap) {
            var legend_div = document.getElementById("maplegendcontainer");
            if (!legend_div) return;
            theMap.getContainer().appendChild(legend_div);
            return legend_div;
        }
    
        map.addControl(legend_control, new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(0, 68)));
    }

    getMarkers(mapid,'',1);
}

function mapLib_Start_new_old(mapid,container,iz,mz,lat,lng,level)
{

    if (!GBrowserIsCompatible())
        return;
    
    map = new GMap2(container,{mapTypes:[]});
    
    var copyright = new GCopyright(1,new GLatLngBounds(new GLatLng(lat, lng),new GLatLng(lat+3, lng+3) ),7, "MapLib.net");
    var copyrightCollection = new GCopyrightCollection('Map Data:');
    copyrightCollection.addCopyright(copyright);
    
    var tilelayers = [new GTileLayer(copyrightCollection,7,iz)];  // iz is max. remember, this script started in chinese
    tilelayers[0].isPng = function(){ return true; };
    tilelayers[0].getOpacity = function(){ return 1.0; };
    tilelayers[0].getTileUrl = function(coord,zoom){
      return base_dir + "tiles/"+mapid+"/"+zoom+'/'+coord.x+"_"+coord.y+".png";
    }
    
    var custommap = new GMapType(tilelayers, new GMercatorProjection(15), "MapLib");
    map.addMapType(custommap);
    
    map.setCenter(new GLatLng(lat,lng),level,custommap);
    
    omap=new GOverviewMapControl(new GSize(200,200));
    map.addControl(omap);
    //omap.hide(true);
    
    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());
    
    getMarkers(mapid,'',1);
}

function mapLib_Start_old(mapid,container,iz,mz,lat,lng,level)
{
			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,iz)];
			  tilelayers[0].isPng = function(){ return false; };
			  tilelayers[0].getTileUrl = function(coord,zoom){
				  return "/admissions/map/tiles/"+mapid+"/"+zoom+'/'+coord.x+"_"+coord.y+".png";
			  }
			  
			  var custommap = new GMapType(tilelayers, new GMercatorProjection(15), "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);

			  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());

			  getMarkers(mapid,'',1);
}

function getMarkers(mapid,kw,page)
{
	  map.clearOverlays();
	  GEvent.clearListeners(map,'click');
	  GEvent.clearListeners(map,'mousemove');

	  if (kw==null)
	  {
		  kw='';
	  }

        if (document.getElementById('panel')) {
	    var url="/admissions/map/action.php?action=get_markers_list&kw="+kw+"&page="+page+"&mapid="+mapid+rand();
	    var pars;

	    new Ajax.Updater('panel', url, {method: 'get', parameters: pars,onFailure: failure,onLoading:loading,onComplete:done});
	}

	var url="/admissions/map/action.php?action=get_markers_xml&kw="+kw+"&page="+page+"&mapid="+mapid+rand();
	new Ajax.Request(url,{method: 'get', parameters: pars,onFailure: failure,onLoading:loading, onComplete: createMarkers});
}

function createMarkers(o)
{
	var tag=new Array();
	tag=Xparse(o.responseText);
	process_tag(tag);
}

function process_tag(tag)
{
	if (tag.attributes["longitude"]!=null)
	{
		createMarker(tag.attributes["id"],new GLatLng(tag.attributes["latitude"], tag.attributes["longitude"]),tag.attributes["title"],tag.attributes["introduction"],tag.attributes["iconid"],tag.attributes["iw"],tag.attributes["ih"]);
	}
	for(var i=0;i < tag.contents.length;i++)
	{
		if(tag.contents[i].type=="element")
			process_tag(tag.contents[i]);
	}
}

function createMarker(markerid,point,tooltip,html,iconid,iw,ih) {
	
	if (!_maplib_icons[iconid])
	{
		createIcon(iconid,iw,ih);
	}

	var marker = new GMarker(point,{icon:_maplib_icons[iconid],title:tooltip});

	marker.id=markerid;
	marker.group=iconid;
	
	_maplib_info[markerid]=generateInfo(html,tooltip);

  GEvent.addListener(marker, "click", function() {
	
	marker.openInfoWindow(_maplib_info[markerid]);
  });


  map.addOverlay(marker);
}

function failure()
{
	alert("request failure");
}

function loading()
{
}

function done()
{
}

function createBasicIcon(){
	_maplib_icons.basic = new GIcon();
	_maplib_icons.basic.image = "/admissions/map/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, '/admissions/map/' + 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(/\[url\=(.*?)\](.*?)\[\/url\]/i,"<a href='$1' target='_blank'>$2</a>");

	html2="<div style='width: 200px;'><b>"+tooltip+"</b><br><hr noshade color='#3399FF' size='1' width='180' align='left'>"+html;
	html2=html2+"<br></div>";

	var div = document.createElement('div');
	div.innerHTML = html2;

	return div;
}


function locate(x,y,z,markerid)
{
	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].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 invoke_frm_addPoint(mapid)
{
  var url="/admissions/map/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');
}

function rand()
{
	return "&rand="+(Math.random()*Math.random());
}

function rand2()
{
	return "?rand="+(Math.random()*Math.random());
}

function toggleMarker(param,mapid)
{
  updateTextArea("introduction");
  var url="/admissions/map/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');
		  }
	  }
	  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');
	}
}

function dialog() {
  Dialog.alert({url: "/admissions/map/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='/admissions/map/images/hide-arrow.png'";
	  panelToggled=null;
	} else
	{
		document.getElementById('tdPanel').style.display="none";
		document.getElementById('togglePanelImg').innerHTML="<img border='0' src='/admissions/map/images/show-arrow.png'";
		panelToggled=true;
	}
}
