//----------------------------------------------
//  -searchObject(classname:string,kind:string,attribute:string):string
//----------------------------------------------
function searchObject(classname,kind,attribute) {
	return map.tcl("searchObject",classname,kind,attribute);
}
//----------------------------------------------
//  -clearSelection()
//----------------------------------------------
function clearSelection() {
	map.tcl("clearSelection");
}
//----------------------------------------------
//  -selectionObject(classname:string,id:string)
//----------------------------------------------
function selectionObject(classname,id) {
	map.tcl("selectionObject",classname,id);
}
//----------------------------------------------
//	+getXY(layername:string,id:strint):string
//----------------------------------------------
function getXY(classname,id) {
	return map.tcl("getXY",classname,id);
}
//----------------------------------------------
//  -getObject(classname:string,id:string):string
//----------------------------------------------
function getObject(classname,id) {
	return map.tcl("getObject",classname,id);
}
//----------------------------------------------
//	+checkObject(classname:string,id:string)
//----------------------------------------------
function checkObject(classname,id) {
	return map.tcl("checkObject",classname,id);
}
//----------------------------------------------
//	+setSnapMode(mode:string)
//----------------------------------------------
function setSnapMode(mode) {
	map.tcl("setSnapMode",mode);
}
//----------------------------------------------
//	+getSnapMode():string
//----------------------------------------------
function getSnapMode() {
	map.tcl("getSnapMode");
}
//----------------------------------------------
//  -redrawCanvas()
//----------------------------------------------
function redrawCanvas() {
	map.tcl("redrawCanvas");
}
//----------------------------------------------
//	+getClassNameO(mapobj:mapobject):string
//	マップオブジェクトのクラス名を返します
//	mapobjectは電子国土地図オブジェクトです
//----------------------------------------------
function getClassNameO(mapobj) {
	return map.tcl("getClassNameO",mapobj);
}
//----------------------------------------------
//	+getClassNameL(layername:string):string
//	マップオブジェクトのクラス名を返します
//----------------------------------------------
function getClassNameL(layername) {
	var temp = layername.split(".");
	var name = temp[0];
	var classname = "";
	switch(name){
		case "掲示板":
			classname = "Forum";
			break;
		case "掲示板テキスト":
			classname = "Ftext";
			break;
		default:
			classname = "";
			break;
	}
	return classname;
}
//-------------------------------------
//	+createMapClass(object:mapclass)
//	マップクラスを電子国土に作成します
//	mapclassはJavaScriptクラスオブジェクトです
//-------------------------------------
function createMapClass(mcl) {

	var p = mcl.property.split(",");

	var list="";
	for(i=0;i<p.length;i++) {
		list = list+"{"+p[i]+" {} B} ";
	}
	var script =
	 "class "+mcl.classname+" {"
		+"method "+mcl.classname+" {} {"
			+"variable loaded 0;"
			+"class::LayerName [split "+mcl.layers+" ,];"
			+"class::FormName {} {};"
			+"class::FieldList {"+list+"};"
		+"};"
	+"}";
	map.tcl(script);

	mcl.symbol();
	mcl.layer();

	script = "virtual "+mcl.classname+"::new {obj} {gdi $obj.name csv;"+" gui fire [list eval top.fire_onCreate('"+mcl.classname+"',$obj)]};";
	map.tcl(script);

	map.tcl("class::new "+mcl.classname);
}
//-------------------------------------
//	-newLayer(object:mapclass)
//	レイヤを電子国土に作成します
//-------------------------------------
function newLayer(obj) {

	var level = obj.level.split(",").join(" ");
	switch(obj.type) {
		case "string": case "line":
			new_string_layer(obj,level);
			break;
		case "polygon":
			new_polygon_layer(obj,level);
			break;
		case "symbol":
			new_symbol_layer(obj,level);
			break;
		case "text":
			new_text_layer(obj,level);
			break;
	}
}
//----------------------------------------------
//	-new_symbol_layer(object:mapclass)
//	シンボルレイヤを電子国土に作成します
//----------------------------------------------
function new_symbol_layer(obj,level) {

	var script =
		"set hcanvas $gwin::Canvas;"
		+"array set prop {"
		+"field {"+level+"} "
		+"layer "+obj.name+" "
		+"type "+obj.type+" "
		+"symbol {"+obj.symbolname+" "+obj.symbolsize+"} "
		+"tranceparent "+((obj.transparency)? "on" : "off")+" "
		+"display "+((obj.visible)? "on" : "off")+"};"
		+"class::SetLayerProperty $hcanvas prop addplane;";
	map.tcl(script);
}
//----------------------------------------------
//	-new_string_layer(object:mapclass)
//	ラインレイヤを電子国土に作成します
//----------------------------------------------
function new_string_layer(obj,level) {

	var width;
	if(obj.width<100) width="width "; else width="dwidth ";

	var style;
	if(obj.style==null) style = "solid"; else style = obj.style;

	var rgb;
	if(obj.line_rgb==null)
		rgb = "0 0 0";
	else
		rgb  = obj.line_rgb.split(",").join(" ");

	var script =
		"set hcanvas $gwin::Canvas;"
		+"array set prop {"
		+"field {"+level+"} "
		+"layer "+obj.name+" "
		+"type string "
		+"rgb {"+rgb+"} "
		+"style "+style+" "
		+width+obj.width+" "
		+"tranceparent "+((obj.transparency)? "on" : "off")+" "
		+"display "+((obj.visible)? "on" : "off")+"};"
		+"class::SetLayerProperty $hcanvas prop addplane;";
	map.tcl(script);
}

//----------------------------------------------
//	-new_polygon_layer(object:mapclass)
//	ポリゴンレイヤを電子国土に作成します
//----------------------------------------------
function new_polygon_layer(obj,level) {

	var width;
	if(obj.width<100) width="width "; else width="dwidth ";

	var paint;
	if(obj.paint==null) paint = false; else paint = obj.paint;

	var rgb,hrgb,brgb;

	if(obj.line_rgb==null)
		rgb = "0 0 0";
	else
		rgb  = obj.line_rgb.split(",").join(" ");

	if(obj.brush_rgb==null)
		hrgb = "0 0 0";
	else
		hrgb = obj.brush_rgb.split(",").join(" ");

	if(obj.back_rgb==null)
		brgb = "255 255 255";
	else
		brgb = obj.back_rgb.split(",").join(" ");

	var style;
	if(obj.style==null) style = "solid"; else style = obj.style;

	var brush;
	if(obj.brush==null) brush = "null"; else brush = obj.brush;

	var script =
		"set hcanvas $gwin::Canvas;"
		+"array set prop {"
		+"field {"+level+"} "
		+"layer "+obj.name+" "
		+"type "+obj.type+" "
		+"rgb {"+rgb+"} "
		+"hrgb {"+hrgb+"} "
		+"brgb {"+brgb+"} "
		+"style "+style+" "
		+width+obj.width+" "
		+"brush "+brush+" "
		+"paint "+((paint)? "on" : "off")+" "
		+"tranceparent "+((obj.transparency)? "on" : "off")+" "
		+"display "+((obj.visible)? "on" : "off")+"};"
		+"class::SetLayerProperty $hcanvas prop addplane;";
	map.tcl(script);
}
//----------------------------------------------
//	-new_text_layer(object:mapclass)
//	テキストレイヤを電子国土に作成します
//----------------------------------------------
function new_text_layer(obj,level) {

	var font;
	if(obj.fontsize<100) font="font "; else font="dfont ";

	var rgb  = obj.fontrgb.split(",").join(" ");

	var paint;
	if(obj.paint==null) paint = false; else paint = obj.paint;
	if(paint==true) {
		brgb = obj.back_rgb.split(",").join(" ");
	} else {
		brgb = "0 0 0";
	}

	var script =
		"set hcanvas $gwin::Canvas;"
		+"array set prop {"
		+"field {"+level+"} "
		+"layer "+obj.name+" "
		+"type "+obj.type+" "
		+"font "+"{{"+obj.font+"} "+obj.fontstyle+" "+obj.fontsize+"} "
		+"rgb {"+rgb+"} "
		+"paint "+((paint)? "on" : "off")+" "
		+"brgb {"+brgb+"} "
		+"tranceparent "+((obj.transparency)? "on" : "off")+" "
		+"display "+((obj.visible)? "on" : "off")+"};"
		+"class::SetLayerProperty $hcanvas prop addplane;";
	map.tcl(script);
}
//----------------------------------------------
//	+newSymbol(object:mapclass)
//	シンボルを電子国土に作成します
//----------------------------------------------
function newSymbol(obj) {

	var script=
		"set hcanvas $gwin::Canvas;"
		+"set hsym [gdi $hcanvas.newsymbol "+obj.name+"];"
		+"array set prop {layer bmp type bmp};"
		+"::class::SetSymbolLayerProperty $hsym prop;"
		+"::class::CreateSymbolObject $hsym bmp name {"+getAbsolutePath(obj.url)+"} xy 0 0;";
	map.tcl(script);
}
//----------------------------------------------
//	-getAbsolutePath(path:filename):url
//	相対パスを絶対パスに変換します
//----------------------------------------------
function getAbsolutePath(path) {

	map.tcl("set _url [WEBTIS::GetURL {"+window.location+"} "+path+"]");
	map.tcl("regsub file: $_url {} _url;regsub /// $_url {} _url");
	map.tcl("regsub -all %20 $_url { } _url");
	var url=map.tcl("set _url");
	map.tcl("unset _url");
	return url;
}
//----------------------------------------------
//	+startDraw(layername:string)
//	マウスを作図モードにします
//----------------------------------------------
function startDraw(layer) {
	map.tcl("draw::start [gdi $gwin::Canvas.layer "+layer+"]");
}
//----------------------------------------------
//	+stopDraw()
//	作図モードを終了します
//----------------------------------------------
function stopDraw() {
	map.tcl("draw::end $gwin::Canvas");
}
//----------------------------------------------
//	-fire_onCreate(classname:mapclass,mapobj:mapobject)
//	マップクラスの作図完了処理をコールバックします
//----------------------------------------------
function fire_onCreate(classname,mapobj) {
	eval(classname+".onCreate("+mapobj+")");
}
//----------------------------------------------
//	+setFieldVal(mapobj:mapobject,fieldname:string,value:string)
//	マップオブジェクトのプロパティ値をセットします
//	mapobjectは電子国土地図オブジェクトです
//----------------------------------------------
function setFieldVal(mapobj,fieldname,value) {
	map.tcl("class::SetFieldVal",mapobj,fieldname,value);
}
//----------------------------------------------
//	+getFieldVal(mapobj:mapobject,fieldname:string):string
//	マップオブジェクトのプロパティ値を読み出します
//	mapobjectは電子国土地図オブジェクトです
//----------------------------------------------
function getFieldVal(mapobj,fieldname) {
	return map.objFieldVal(mapobj,fieldname);
}
//----------------------------------------------
//	+saveCsv(classname:string)
//	指定されたマップクラスの全マップオブジェクトのCSVレコードを表示します
//----------------------------------------------
function saveCsv(classname) {
	map.tcl("saveCsv",classname);
}
//----------------------------------------------
//	+loadText(csvfilename:string)
//	CSVファイルを読み込みマップオブジェクト（テキスト）を作成します
//----------------------------------------------
function loadText(file) {
	map.tcl("loadText",file);
}
//----------------------------------------------
//	+loadCsv(csvfilename:string)
//	CSVファイルを読み込みマップオブジェクトを作成します
//----------------------------------------------
function loadCsv(file) {
	map.tcl("loadCsv",file);
}
//----------------------------------------------
//	+removeObjects(classname:string)
//	指定されたマップクラスの全オブジェクトを削除します
//----------------------------------------------
function removeObjects(classname) {
	map.tcl("removeObjects",classname);
	eval("top."+classname+".current=null;");
}
//----------------------------------------------
//	+removeObj(obj:mapobject)
//	マップオブジェクトを削除します
//----------------------------------------------
function removeObj(mapobj) {
	map.tcl("removeObj",mapobj);
}
//----------------------------------------------
//	+newObject(layername:string,geometry:Array):mapobject
//	指定されたレイヤのオブジェクトを作成します
//----------------------------------------------
function newObject(layername,geometry) {
	return map.tcl("newObject",layername,geometry.join(" "));
}

//----------------------------------------------
//	-load_tclfile(file:string)
//	tclスクリプトファイルをロードします
//----------------------------------------------
function load_tclfile(file) {
	var file = getAbsolutePath(file);
	map.tcl("remotesource",file);
	return;

//	var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
//    xmlhttp.open("GET", file, false);
//    xmlhttp.send();
//    map.tcl("eval",xmlhttp.responseBody);
}
