var map=null;
var geocoder=null;
var marker=null;
var geozoom=null;
var map_height=null;
var url=null;
var url_op=null;
var mk=[];
var desc=[];
var slid=0;
var arricon='';

//handl events
var DRAG ='dragend'; // 'dragend' or 'drag' 
var MOVE ='moveend'; // 'moveend' or 'move'

function InitializeGmap(){

	if(!document.getElementById('map'))return false;

	map = new GMap2(document.getElementById('map'));

	// If don't use , comment out these settings.  

	// option1: add small map
	//map.addControl(new GOverviewMapControl());

	// option2: add large map control
	map.addControl(new GLargeMapControl());

	// option3: add Scale
	map.addControl(new GScaleControl());

	// option4: add satellite button
	map.addControl(new GMapTypeControl());

	// option5: enable DoubleClickZoom
	map.enableDoubleClickZoom();

	// option6: enable smooze Zoom
	map.enableContinuousZoom();

	// option7: enable move by keybode
	new GKeyboardHandler(map);
	
	//option10: zoom then get address by geocording (geozoom=-1:no set)
	geozoom=18;

	//option : include kml files
	ShowGeoXml();

	return true;

}
function ShowGeoXml(){
	if(!kmls)return;
	for( var i = 0; i < kmls.length; i++ ) {
			var geoXml = new GGeoXml(kmls[i]);
			map.addOverlay(geoXml);
	}
}



function ShowItemGMap() {

	//show map on individual article.

	if(GBrowserIsCompatible()){

		if(!InitializeGmap())return;

		//setcenter
		var center = new GLatLng(itemlat,itemlng);
		map.setCenter(center,parseInt(itemz));
		map.setMapType(G_HYBRID_MAP);	// start in hybrid mode
		var gmarkeroptions = new Object();
		gmarkeroptions.title = unescape(lang['here']);

		if(arricon==''){
			marker = new GMarker(center);
			map.addOverlay(marker);
		}else{
			var p = arricon.split(",");
			icon = new GIcon();
			icon.image = p[0];
			icon.iconSize = new GSize(eval(p[1]), eval(p[2]));
			if(p[3]!=''){
				icon.shadow = p[3];
				icon.shadowSize = new GSize(eval(p[4]), eval(p[5]));
			}
			icon.iconAnchor = new GLatLng(eval(p[7]),eval(p[6])); 
			marker = new GMarker(center,icon);
			map.addOverlay(marker);
		}

	}else{

		document.getElementById("map").innerHTML='<strong>'+unescape(lang['gmapdisable'])+'</strong>';

	}
}

function ShowGMap() {

	// display many markers.

	if(GBrowserIsCompatible()){

		if(!InitializeGmap())return;

		if(draw_rss){
 			var kml = url+'/kml.php?'+url_op;
			var geoXml = new GGeoXml(kml);
			map.addOverlay(geoXml);
		}

		searchSales();

		//addListener
		GEvent.addListener(map, MOVE, function() {
			var point = map.getCenter();
			DrawLatLngTxt(point);
	    });
		GEvent.addListener(map, 'zoomend',function(oldZoomLevel, newZoomLevel) {
	     		document.getElementById('z').value  =newZoomLevel;
	     		document.getElementById('sz').innerHTML  =newZoomLevel;
		});
		
		//setcenter
		var center = new GLatLng(document.getElementById('lat').value,document.getElementById('lng').value);
	  	map.setCenter(center,parseInt(document.getElementById('z').value));
		map.setMapType(G_HYBRID_MAP);	// start in hybrid mode

		if(enable_post)right_click();
		
	}else{

		document.getElementById("map").innerHTML='<strong>'+unescape(lang['gmapdisable'])+'</strong>';

	}
}

function right_click(){

	var rmenu = document.createElement("div");
	rmenu.style.visibility = "hidden";
	rmenu.innerHTML = "<input type='button' onclick='frmlatlng.submit()' style='padding:3px;font-size:13px;cursor:pointer;' value='"+unescape(lang['additem'])+"'>";

	map.getContainer().appendChild(rmenu);

	GEvent.addListener(map, "singlerightclick", function(point) {
		DrawLatLngTxt(map.fromContainerPixelToLatLng(point));
		var rmenu_pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(point.x, point.y));
		rmenu_pos.apply(rmenu);
		rmenu.style.visibility = "visible";
	});

	GEvent.addListener(map, "click", function() {
	  	if (rmenu.style.visibility == "visible")rmenu.style.visibility = "hidden";
	});
	GEvent.addListener(map, "mouseout", function() {
	  	if (rmenu.style.visibility == "visible")rmenu.style.visibility = "hidden";
	});
	GEvent.addListener(map, "moveend", function() {
	  	if (rmenu.style.visibility == "visible")rmenu.style.visibility = "hidden";
	});

}

function searchSales(){
	
	//get markers by kml

    var kml = url+'/kml.php?mime=xml&'+url_op;

    var opt = {
        method: 'GET',
        asynchronous: true,
        onComplete: func2
    };
    var conn = new Ajax.Request( kml, opt );

}

function func2(req){

	//show markers.
	
	if(!draw_rss){
		//create icons
	  	var nl = req.responseXML.getElementsByTagName( 'IconStyle' );
		var icon = [];
	  	for( var i = 0; i < nl.length; i++ ) {
		    var nli = nl[ i ];
		    var icd = eval(nli.getElementsByTagName( 'icd' )[0].firstChild.nodeValue);
		    var iimg = nli.getElementsByTagName( 'href' )[0].firstChild.nodeValue;
		    var shadow = nli.getElementsByTagName( 'shadow' )[0].firstChild.nodeValue;
		    var param = nli.getElementsByTagName( 'param' )[0].firstChild.nodeValue;
			var p = param.split(",");

		    icon[icd] = new GIcon();
		    icon[icd].image = iimg;
		    icon[icd].iconSize = new GSize(eval(p[0]), eval(p[1]));
			if(shadow!='x'){
			    icon[icd].shadow = shadow;
			    icon[icd].shadowSize = new GSize(eval(p[2]), eval(p[3]));
			}
		    icon[icd].iconAnchor = new GLatLng(eval(p[5]),eval(p[4])); 
		    icon[icd].infoWindowAnchor = new GLatLng(eval(p[7]),eval(p[6])); 
	  	}
	}



	var lst='';
  	var nl = req.responseXML.getElementsByTagName( 'Placemark' );
  	for( var i = 0; i < nl.length; i++ ) {
	    var nli = nl[ i ];
	    var lid = eval(nli.getElementsByTagName( 'lid' )[0].firstChild.nodeValue);
	    var icd = eval(nli.getElementsByTagName( 'icd' )[0].firstChild.nodeValue);
	    var name = nli.getElementsByTagName( 'name' )[0].firstChild.nodeValue;
	    var coordinates = nli.getElementsByTagName( 'coordinates' )[0].firstChild.nodeValue;
	    var description = nli.getElementsByTagName( 'description' )[0].firstChild.nodeValue;

		lst += "<li><a href='javascript:void(0)' onclick='go("+lid+")'>"+name+"</a></li>";

		var p = coordinates.split(",");
		var ll=new GLatLng(eval(p[1]), eval(p[0]));
		if(icd==0)
			mk[lid] = new GMarker(ll);
		else
			mk[lid] = new GMarker(ll,icon[icd]);


		if(!draw_rss){

			map.addOverlay(mk[lid]);

			desc[lid]="<div style='width:250px;'><strong>"+name+"</strong><br />"+description+"</div>";

			GEvent.addListener( mk[lid], "click", 
			    GEvent.callbackArgs( mk[lid], function( lid ){ 
			        this.openInfoWindowHtml(desc[lid]); 
			    },lid));
		}
  	}

	if(lst)
		lst = "<ul>" + lst + "</ul>";
	else
		lst = "<div style='font-size:90%; font-style:italic;'>"+unescape(lang['nodata'])+"</div>";

	document.getElementById("gn_mklist").innerHTML=lst;
	if(slid>0){mk[slid].openInfoWindowHtml(desc[slid]);}
}

function go(lid){
	map.panTo(mk[lid].getPoint());
	if(!draw_rss)mk[lid].openInfoWindowHtml(desc[lid]);
}

function InputGMap() {
	if(GBrowserIsCompatible()){

		map_height=document.getElementById("map").style.height;

		//initialize
		if(!InitializeGmap())return;
		geocoder = new GClientGeocoder();

		//setcenter
		var center = new GLatLng(document.getElementById('lat').value,document.getElementById('lng').value);
	  	map.setCenter(center,parseInt(document.getElementById('z').value));
	  	map.setMapType(G_HYBRID_MAP);	// start in hybrid mode


		//setmarker
		var gmarkeroptions = new Object();
		gmarkeroptions.draggable = true;
		gmarkeroptions.title = unescape(lang['setpoint']);
		marker = new GMarker(center, gmarkeroptions);
		map.addOverlay(marker);

		//addListener
		GEvent.addListener(map, 'click', function(overlay, point) {
			if (point) {
				marker.setPoint(point);
				DrawLatLngTxt(point);
		   	}
	    });
		GEvent.addListener(map, 'zoomend',function(oldZoomLevel, newZoomLevel) {
	    	document.getElementById('z').value  =newZoomLevel;
	    	document.getElementById('sz').innerHTML  =newZoomLevel;
		});
	    GEvent.addListener(marker, DRAG,function() {
	       	var point = marker.getPoint();
			DrawLatLngTxt(point);
	    });

		ChangeMapArea(document.getElementById('set_latlng'));

	}else{

		document.getElementById("geo").style.visibility = "hidden"; 
		if(document.getElementById("geo"))document.getElementById("map").innerHTML='<strong>'+unescape(lang['gmapdisable'])+'</strong>';

	}
}

function showAddress(address) {

	//get latlng by address strings.

	if(!GBrowserIsCompatible()||address=='')return;

	if (geocoder) {
       	geocoder.getLatLng(address,function(point) {
			if (!point) {
				alert(address + unescape(lang['notfound']));
			} else {
				if(geozoom<0){
					map.setCenter(point);
				}else{
					map.setCenter(point,geozoom);
				}
               	marker.setPoint(point);
               	marker.openInfoWindowHtml(address);
				DrawLatLngTxt(point);
           	}
       	});
	}

}

function DrawLatLngTxt(point){

	document.getElementById('lat').value  = mround(point.y);
	document.getElementById('slat').innerHTML  = mround(point.y);
	document.getElementById('lng').value  = mround(point.x);
	document.getElementById('slng').innerHTML  = mround(point.x);

}

function ChangeMapArea(obj){

	if(obj.checked){
		document.getElementById("maparea").style.visibility = "hidden"; 
		document.getElementById("map").style.height = "0px"; 
		if(document.getElementById("geo"))document.getElementById("geo").style.visibility = "hidden"; 
	}else{
		document.getElementById("maparea").style.visibility = "visible"; 
		document.getElementById("map").style.height = map_height; 
		if(document.getElementById("geo"))document.getElementById("geo").style.visibility = "visible"; 
	}

}

function mround(value){
	return Math.round(parseFloat(value)*1000000)/1000000 ;
}

