var map;
var NEvent;
var GEvent;
var GXmlHttp;
var GXml;
var NMapListener = false;
var GMapListener = false;
var NGMAP_URL = "http://sparcs.org/~airlover/9eye.net/map/popup/NGMap.php";
var NMAP_URL = "http://maps.naver.com/";
var NGMAP_SHOW_URL = "http://sparcs.org/~airlover/9eye.net/map/NGMap_service.php"
var MAP_ICON_URL = "http://sparcs.org/~airlover/9eye.net/map/images/mapicon.gif";

function getMapMode() {
	return (map && map.getCurrentMapMode() == window.ngmap._mModeGMap) ? "G" : "N";
}

function getCoordInfo() {
	if (map) mapObj = map.getNGMapObject(); 
	if (!mapObj) return false;
	navermap = document.getElementById('ng_inp_nmap');
	view = getMapMode();
	zoom = mapObj.getZoom();
	if (navermap.checked || navermap.checked == "checked") {
		map.saveCoordinates();
		coord = map.getCoordinates();
		nc = coord.getCoordNaver();
		x = Math.round(nc.cx);
		y = Math.round(nc.cy);
		zoom = coord.getZoom();
		view = "N";
	} else {
		coord = mapObj.getCenter();
		x = coord.x;
		y = coord.y;
	}
	title = document.getElementById('ng_inp_location').value;
	return {x:x,y:y,zoom:zoom,title:title,view:view};
}

function getMapLinkUrl() {
	mc = getCoordInfo();
	return makeMapLinkUrl(mc.x, mc.y, mc.zoom, mc.title, mc.view);
}

function getMapShowUrl() {
	mc = getCoordInfo();
	return makeMapShowUrl(mc.x, mc.y, mc.zoom, mc.title, mc.view);
}

function makeMapShowUrl(x,y,zoom,title,view) {
	//navermap = document.getElementById('ng_inp_nmap');
	//if (navermap.checked == "checked") {
	//	return NMAP_URL+"?";
	//} 
	if (view == "G") {
		parameter = 'view='+view+'&lon='+x+'&lat='+y+'&zoom='+zoom+'&title='+encodeURIComponent(title)+"&enc=utf-8";
	} else {
		parameter = 'view='+view+'&x='+x+'&y='+y+'&zoom='+zoom+'&title='+encodeURIComponent(title)+"&enc=utf-8";
	}
	return NGMAP_SHOW_URL+"?"+parameter;
}

function makeMapLinkUrl(x,y,zoom,title,view) {
	navermap = document.getElementById('ng_inp_nmap');
	if (navermap.checked || navermap.checked == "checked") {
		x*=100; y*=100;
		if (!title) title = "this";
		parameter = 'x='+x+'&y='+y+'&title='+title;
		return NMAP_URL+"?"+parameter;
	} 
	if (view == "G") {
		parameter = 'view='+view+'&lon='+x+'&lat='+y+'&zoom='+zoom+'&title='+title;
	} else {
		parameter = 'view='+view+'&x='+x+'&y='+y+'&zoom='+zoom+'&title='+title;
	}
	return NGMAP_URL+"?"+parameter;
}

function makeMapIconText(url) {
	iconText = title+'(<a href='+url+' target=\'_blank\'><img src="'+MAP_ICON_URL+'" alt=\'map\' style=\'cursor: pointer;border:0px;\' /></a>)';
	return iconText;
}

function toClipboardCoordinate() {
	mc = getCoordInfo();
	toClipboardHTML(mc.x+","+mc.y);
}

function toClipboardHTML(text, message) {
	outtext = document.getElementById('ng_out_text');
	outtext.value = text;
	if (document.body && document.body.createTextRange) {
		var forclip = document.getElementById('forclip');
		forclip.innerHTML = text;
		doc = document.body.createTextRange();
		doc.moveToElementText(forclip);
		doc.execCommand('copy');
	} else if (window.netscape) {
		copyTextToClipboard(text);
	}

	if (!message) message = "클립보드에 저장되었습니다.\nCtrl+V 키를 이용하여서 붙여 넣기를 하시면 됩니다.";
	alert(message);
}
function isToBlog() {
	blog = document.getElementById('ng_inp_blog');
	if (blog == null || !blog) return false;
	return (blog.checked || blog.checked == "checked");
}
function insertMapIframe() {
	URLText = getMapShowUrl();
	Iframe = "<iframe src='"+URLText+"' width='400' height='300' border='0' frameborder='0' scrolling='no' style='border:1px solid gray'> </iframe>";
	if (isToBlog() && opener && opener.addContentsIntoEditor)
		opener.addContentsIntoEditor(Iframe);
	else toClipboardHTML(Iframe);
}
function insertMapLink() {
	URLText = getMapLinkUrl();
	if (isToBlog() && opener && opener.addContentsIntoEditor)
		opener.addContentsIntoEditor(URLText);
	else toClipboardHTML(URLText);
}
function insertMapIcon() {
	IconText = makeMapIconText(getMapLinkUrl());
	if (isToBlog() && opener && opener.addContentsIntoEditor)
		opener.addContentsIntoEditor(IconText);
	else toClipboardHTML(IconText);
}

function resized() {
	ifm = document.getElementById("ngmap");
	cp = document.getElementById("centerpoint");
	cp.style.display = "";
	cp.style.left = (ifm.clientWidth-cp.clientWidth)/2 +"px";
	cp.style.top  = (ifm.clientHeight-cp.clientHeight)/2 +"px";
	updatePosition();
}

function loaded() {
	map = window.ngmap.map;
	GXmlHttp = window.ngmap.GXmlHttp;
	GXml = window.ngmap.GXml;
	NEvent = window.ngmap.NEvent;
	GEvent = window.ngmap.GEvent;
	updatePosition();
	GEvent.addListener(map, "change", changeMap);
	updateMoveChecker();
	resized();
}

function updateMoveChecker() {
	if (!NMapListener && map.getNMapObject()) {
		NEvent.addListener(map.getNMapObject(), "move", updatePosition);	
		NMapListener = true;
	}
	if (!GMapListener && map.getGMapObject()) {
		GEvent.addListener(map.getGMapObject(), "moveend", updatePosition);	
		GMapListener = true;
	}
}

function changeMap() {
	updateMoveChecker();
	updatePosition();
}

function updatePosition() {
	if (map) mapObj = map.getNGMapObject();
	if (mapObj) {
		coord = mapObj.getCenter();
		var x = coord.x;
		var y = coord.y;
		if (map.getCurrentMapMode() == window.ngmap._mModeGMap) {
			x = Math.round(x*100000)/100000; 
			y = Math.round(y*100000)/100000; 
			map.saveCoordinates();
			mapcoord = map.getCoordinates();
			coord = mapcoord.getCoordNaver();
			nx = coord.cx;
			ny = coord.cy;
		} else {
			nx = x;
			ny = y;
		}
		setValueById("ng_coordinates", x+", "+y);
		var request = GXmlHttp.create();
		// var locationUrl = "/map/proxy.php?url="+encodeURIComponent('http://maps.naver.com/get_poi_name.php?x='+nx+'&y='+ny);
		// request.open("GET", locationUrl, true);
		// request.onreadystatechange = function() {
		// 	if (request.readyState == 4) {
		// 		updateLocation(request.responseText);
		// 	}
		// }
		// request.send(null);
	}
}

function updateLocation(data) {
	xml = GXml.parse(data);
	var name=xml.getElementsByTagName('name')
	if (name && name[0] && name[0].firstChild) {
		var nameValue=name[0].firstChild.nodeValue;
		setValueById("ng_location", nameValue);
	}
}

function setValueById(id, text) {
	obj = document.getElementById(id);
	if (obj) obj.value = text;
}

function copyTextToClipboard (meintext)
{
  if (window.clipboardData)
    {

      window.clipboardData.setData ("Text", meintext);
    }
  else if (window.netscape)
    {
      netscape.security.PrivilegeManager.
	enablePrivilege ('UniversalXPConnect');

      var clip =
	Components.classes['@mozilla.org/widget/clipboard;1'].
	createInstance (Components.interfaces.nsIClipboard);
      if (!clip)
	return;

      var trans =
	Components.classes['@mozilla.org/widget/transferable;1'].
	createInstance (Components.interfaces.nsITransferable);
      if (!trans)
	return;

      trans.addDataFlavor ('text/unicode');

      var str = new Object ();
      var len = new Object ();

      var str =
	Components.classes["@mozilla.org/supports-string;1"].
	createInstance (Components.interfaces.nsISupportsString);

      var copytext = meintext;

      str.data = copytext;

      trans.setTransferData ("text/unicode", str, copytext.length * 2);

      var clipid = Components.interfaces.nsIClipboard;

      if (!clip)
	return false;

      clip.setData (trans, null, clipid.kGlobalClipboard);

    }
    alert("클립보드에 저장되었습니다.");
}

