<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="マップサーファー V3.0" 
                description="～位置情報マッシュアップのプラットフォーム～"
                author="Kohei Ohtsuka and Naoki Ueda"
                author_email="nao.locapoint@gmail.com"
		screenshot="http://www.locapoint.com/publicutil/mapplets/sc_j.png"
		thumbnail="http://www.locapoint.com/publicutil/mapplets/th.png"
                height="50">
  <Require feature="sharedmap"/>
  <Require feature="setprefs" />
  <Require feature="analytics"/>
</ModulePrefs>
  <UserPref
    name="mapid"
    default_value="googlemaps"
    datatype="hidden"/>
  <UserPref
    name="whattodo"
    default_value="openurl"
    datatype="hidden"/>
  <UserPref
    name="navimailaddr"
    default_value="カーナビのメールアドレス"
    datatype="hidden"/>
  <UserPref
    name="msfrversion"
    default_value=""
    datatype="hidden"/>
<Content type="html"><![CDATA[
<!-- MapSurfer version 3.0.  All right reserved by Locazing Inc. -->
<table border="0" width="100%" cellspacing="1">
	<tr>
		<td width="100%" colspan="3">
			現在地:<br />
			ロカポ: <b><span id="displocapo" title="ロカポ">AA0.AA0.AA0.AA0</span></b>
			<br />
			(緯度,経度: <b><span id="displatlng" title="緯度, 経度">0.000000, 0.000000</span></b>)
		</td>
	</tr>
	<tr>
			<td width="95%" colspan="2">
			<select size="1" name="whattodo" id="whattodo" onclick="rebuildSelection()">
				<option value="openurl" selected>Webサイトへ</option>
				<option value="mobilesite">ケータイへ</option>
				<option value="infosite">情報サイトへ</option>
				<option value="emailurl">Eメールへ</option>
				<option value="carnavi">カーナビへ</option>
				<option value="appli">アプリへ</option>
				<option value="netprint">紙へ</option>
				<option value="dispurl">URL表示</option>
			</select><input type="button" value="サーフ！" name="go" onclick="surf()"><br/>
			行き先
			<span id="mapidSelection">
			<select size="1" name="map_id" id="map_id" onclick="mapidOnClick()">
				<option disabled>---地図サイトを開く---</option>
				<option value="yahoomap">Yahoo! 地図(米国)</option>
				<option value="msnlive">ウィンドウズ ライブ！(全世界)</option>
				<option value="mapquest">マップ･クエスト(米国)</option>
				<option value="msnmap">ＭＳＮマップ(米国)</option>
				<option value="mapion">マピオン(日本)</option>
				<option value="mapionbb">マピオンＢＢ(日本)</option>
				<option value="alpslab">アルプスラボ(日本)</option>
				<option value="navitime">ナビタイム(日本)</option>
				<option value="mapfan">マップファン(日本)</option>
				<option value="yahoomapjapan">Yahoo!地図(日本)</option>
				<option value="itsmoguide">ゼンリン It's-moガイド(日本)</option>
				<option value="goomap">Goo地図(日本)</option>
				<option value="livedoormap">ライブドア地図(日本)</option>
				<option value="chizumaru">ちず丸(日本)</option>
				<option value="msnmapjapan">MSN地図(日本)</option>
				<option value="googlemaps">グーグルマップ(全世界)</option>
				<option value="googlemapsjapan">グーグルマップ(日本語)(全世界)</option>
				<option disabled>---ケータイ用QRコード作成-----</option>
				<option value="googlemobilejapan">グーグルローカルモバイル</option>
				<option value="kokorade">ここらで</option>
				<option value="mapionmobile">マピオンモバイル</option>
				<option value="mapfanmobile">ケータイ地図MapFan</option>
				<option value="itsmonavi">ゼンリン It's-moナビ</option>
				<option value="mapsurfmobile">マップサーファー携帯版</option>
				<option disabled>---情報サイトを開く-----</option>
				<option value="geohack">Geo Hack (地図へのリンク集)</option>
				<option value="dokoiku">ドコイク？</option>
				<option value="doodle">Doodle(ドゥードゥル)</option>
				<option disabled>---アプリケーションを開く---</option>
				<option value="googleearth">グーグル・アース</option>
				<option value="googlesky">グーグル・スカイ！</option>
				<option value="nasaworldwind">NASA ワールド・ウィンド</option>
				<option value="nasa2earth" disabled>NASA W.W.(地球へ切替）(開発中！)</option>
				<option value="nasa2moon" disabled>NASA W.W.(月へ切替)(開発中！)</option>
				<option value="nasa2earth" disabled>NASA W.W.(地球へ切替)(開発中！)</option>
				<option value="nasa2jupter" disabled>NASA W.W.(木星へ切替)(開発中！)</option>
				<option value="nasa2vinus" disabled>NASA W.W.(金星へ切替)(開発中！)</option>
				<option value="nasa2marcury" disabled>NASA W.W.(水星へ切替)(開発中！)</option>
				<option value="nasa2space" disabled>NASA W.W.(宇宙へ切替)(開発中！)</option>
				<option value="navito">Navitoゲートウェイ</option>
				<option value="navitoop">Navitoゲートウェイ(オプション)</option>
				<option disabled>---カーナビに送る---/option>
				<option value="nissan">日産「CarWings」</option>
				<option value="honda">本田「インターナビ」</option>
				<option value="pioneer">カロッツェリア「Air Navi」</option>
				<option value="clarion">クラリオン「AutoPC CADIAS」</option>
				<option value="ecrips" disabled>富士通テン「エクリプス」(開発中！)</option>
				<option disabled>---ネットプリント（セブンイレブン）へ送る---</option>
				<option value="np_mapion">マピオンを印刷</option>
				<option value="np_mapfan">マップファンを印刷</option>
				<option value="np_googlemaps">グーグルマップを印刷</option>
			</select>
			</span>
			<p id="outarea"></p>
			</td>
		</tr>
	<tr>
		<td width="34%">
		<font size="1">
			<a href="javascript:void(window.open('http://map.surf.gs/'))" title="マップサーファーのホームページへ">MapSurfer Home</a>
		</font>
		</td>
		<td width="65%" colspan="2">
		<p align="right"><font size="1">By&nbsp; 
		<a href="javascript:void(window.open('http://kokogiko.net'))" title="ここギコ！のサイトへ">ここギコ！</a>&nbsp;×&nbsp;
		<a href="javascript:void(window.open('http://www.locapoint.com'))" title="ロカポ(LocaPoint)(TM) のサイトへ">ロカポ</a>&nbsp;×&nbsp;
		<a href="javascript:void(window.open('http://an-nai.jp/'))" title="ANNAIのサイトへ">ANNAI</a>
		</font></td>
	</tr>
	<tr>
		<td width="100%" align="left" colspan="3">
		 </td>
	</tr>
</table>
<script>
	//Map Sufer Version
	var msfrversion="J3.0";

	//Google Analytics Tracking
	_IG_Analytics('UA-1146526-1', '/mapsurfer/index');

	// Get user preferences
	var prefs = new _IG_Prefs(__MODULE_ID__);

	//first update ?
	var prevmsfrversion = prefs.getString("msfrversion");
	if(msfrversion!=prevmsfrversion){
		//Google Analytics Tracking
		_IG_Analytics('UA-1146526-1', '/mapsurfer/' + msfrversion + '/update');
		prefs.set("msfrversion", msfrversion);
	}

	document.getElementById("whattodo").value = prefs.getString("whattodo");
	rebuildSelection();
	document.getElementById("map_id").value = prefs.getString("mapid");

	// Center the map in the Mediterranean and zoom out to a world view
	var map = new GMap2();
	map.getCenterAsync(function(center) {
		disp(center);
	});
	GEvent.addListener(map, "moveend", function() {
		map.getCenterAsync(function(center) {
			disp(center);
		});
	});
	function disp(center){
		var lp= LatLon2LocaPoint(center.lat(), center.lng());
		var ll= "" + center.lat().toFixed(6) + ", " + center.lng().toFixed(6);
		var llspan = document.getElementById("displatlng");
		llspan.innerHTML = ll;
		var lpspan = document.getElementById("displocapo");
		lpspan.innerHTML = lp;
	}
	var MapData = {
		"default" : {
			"poix"	   : 0,
			"netprint" : 0,
			"qr"       : 0,
			"tokyo"    : 0,
			"format"   : function(value){return value},
			"query"    : function(){return "q=" + this.format(this.geoloc.latitude) + "," + this.format(this.geoloc.longitude)},
			"_process" : function(){return this.query()},
			"scheme"   : "http://"
		},
		"googlemaps" : {
			"_process" : function(){return "maps.google.com/?" + this.query()}
		},
		"googlemapsjapan" : {
			"_process" : function(){return "maps.google.co.jp/?" + this.query()}
		},
		"googlemapsuk" : {
			"_process" : function(){return "maps.google.co.uk/?" + this.query()}
		},
		"googleearth" : {
			"_process" : function(){return "maps.google.com/?" + this.query() + "&output=kml"}
		},
		"googlesky" : {
			"_process" : function(){return ("www.locapoint.com/publicutil/diymap2kmlsky.html?target=sky&unique=" + Math.random() + "&lp=" + this.geoloc.locapoint) }
		},
		"googlemobilejapan" : {
			"qr"         : 1,
			"_process"   : function(){
				var urlstr =  "www.google.co.jp/m/search?hl=ja&output=xhtml&site=maps&";
				urlstr     += this.query();
				return urlstr;
			}
		},
		"navitime" : {
			"format"   : function(value){
				var dms = new deg2dms(value);
				return sprintf("%+d.%d.%.3f",dms.degint,dms.minint,dms.secfloat);
			},
			"query"    : function(){return "lat=" + this.format(this.geoloc.latitude) + "&lon=" + this.format(this.geoloc.longitude)},
			"_process" : function(){
				var urlstr =  "www.navitime.co.jp/map/index.jsp?datum=0&unit=0&";
				urlstr     += this.query();
				return urlstr;
			}			
		},
		"yahoomapjapan" : {
			"tokyo"    : 1,
			"format"   : function(value){
				var dms = new deg2dms(value);
				return sprintf("%d.%d.%.3f",dms.degint,dms.minint,dms.secfloat);
			},
			"query"    : function(){return "nl=" + this.format(this.geoloc.latitude) + "&el=" + this.format(this.geoloc.longitude)},
			"_process" : function(){
				var urlstr =  "map.yahoo.co.jp/pl?";
				urlstr     += this.query() + "&CE.x=282&CE.y=300&sc=2";
				return urlstr;
			}
		},
		"yahoomapjapansc" : {
			"base"     : "mapion",
			"format"   : function(){return "lat=" + this.format(this.geoloc.latitude) + "&lon=" + this.format(this.geoloc.longitude)},
			"_process" : function(){
				var urlstr =  "map.yahoo.co.jp/pl?type=scroll&";
				urlstr     += this.query() + "&layer=0&sc=2&ac=13103&mode=map&size=s&pointer=on";
				return urlstr;
			}
		},
		"yahoomap" : {
			"query"    : function(){return "lat=" + this.format(this.geoloc.latitude) + "&lon=" + this.format(this.geoloc.longitude)},
			"_process" : function(){
				var urlstr =  "maps.yahoo.com/beta/index.php#mvt=m&maxp=search&trf=0&";
				urlstr     += this.query() + "&mag=5";
				return urlstr;
			}
		},
		"itsmoguide" : {
			"base"     : "yahoomapjapan",
			"query"    : function(){return "m=" + (this.geoloc.longitude >=0 ? "E" : "W") + this.format(this.geoloc.longitude) + (this.geoloc.latitude >=0 ? "N" : "S") + this.format(this.geoloc.latitude)},
			"_process" : function(){
				var urlstr =  "www.its-mo.com/z.htm?" + this.query();
				urlstr     += "&l=10";
				return urlstr;
			}
		},
		"itsmonavi" : {
			"qr"         : 1,
			"tokyo"    : 1,
			"query"    : function(){return "n=" + this.format(this.geoloc.latitude) + "&e=" + this.format(this.geoloc.longitude) },
			"_process" : function(){
				var urlstr =  "mobile.its-mo.com/MapToLink/p1?c=6&sid=00320&" + this.query();
				urlstr     += "&x=5";
				return urlstr;
			}
		},
		"mapsurfmobile" : {
			"qr"         : 1,
			"query"    : function(){return "key=" + this.format(this.geoloc.locapoint)},
			"_process" : function(){
				var urlstr =  "http://map.surf.gs/m/key?" + this.query();
				//alert(urlstr);
				return urlstr;
			}
		},



		"mapion"  : {
			"tokyo"    : 1,
			"format"   : function(value){
				var dms = new deg2dms(value);
				return sprintf("%d/%02d/%06.3f",dms.degint,dms.minint,dms.secfloat);
			},
			"query"    : function(){return "nl=" + this.format(this.geoloc.latitude) + "&el=" + this.format(this.geoloc.longitude)},
			"_process" : function(){
				var urlstr =  "www.mapion.co.jp/c/f?grp=all&uc=1&scl=25000&bid=MapSurferMapplet&";
				urlstr     += this.query();
				return urlstr;
			}
		},
		"mapionbb" : {
			"base"       : "mapion",
			"_process" : function(){
				var urlstr =  "www.mapion.co.jp/c/f?grp=MapionBB&uc=1&scl=25000&bid=MapSurferMapplet&";
				urlstr     += this.query();
				return urlstr;
			}
		},
		"mapionmobile" : {
			"qr"         : 1,
			"base"       : "mapion",
			"_process" : function(){
				var urlstr =  "www.mapion.co.jp/c/f?grp=link&uc=1&scl=25000&bid=MapSurferMapplet&";
				urlstr     += this.query();
				return urlstr;
			}
		},
		"alpslab" : {
			"base"       : "mapion",
			"query"    : function(){return "p=" + this.format(this.geoloc.latitude) + "," + this.format(this.geoloc.longitude)},
			"_process" : function(){return "base.alpslab.jp/?s=25000;" + this.query()}
		},
		"mapfan"  : {
			"tokyo"    : 1,
			"format"   : function(value){
				var dms = new deg2dms(value);
				return sprintf("%d.%02d.%04.1f",Math.abs(dms.degint),dms.minint,dms.secfloat);
			},
			"query"    : function(){return "MAP=" + (this.geoloc.longitude >=0 ? "E" : "W") + this.format(this.geoloc.longitude) + (this.geoloc.latitude >=0 ? "N" : "S") + this.format(this.geoloc.latitude)},
			"_process" : function(){
				var urlstr =  "kokomail.mapfan.com/receivew.cgi?" + this.query();
				urlstr     += "&ZM=11&CI=R";
				return urlstr;
			}
		},
		"mapfanmobile" : {
			"qr"         : 1,
			"base"       : "mapfan"
		},
		"goomap" : {
			"base"       : "mapfan",
			"format"   : function(value){
				var dms = new deg2dms(value);
				return sprintf("%d.%02d.%06.3f",Math.abs(dms.degint),dms.minint,dms.secfloat);
			},
			"_process" : function(){
				var urlstr =  "map.goo.ne.jp/map.php?" + this.query();
				urlstr     += "&ZM=&SZ=&sw=1&C1=29&C2=210&POSTAL=";
				return urlstr;
			}
		},
		"livedoormap" :	{
			"base"       : "mapfan",
			"_process" : function(){return "map.livedoor.com/map/?SZ=500,320&ZM=10&" + this.query()}
		},
		"chizumaru" : {
			"base"      : "yahoomapjapan",
			"query"    : function(){return (this.geoloc.longitude >=0 ? "E=" : "W=") + this.format(this.geoloc.longitude) + (this.geoloc.latitude >=0 ? "&N=" : "&S=") + this.format(this.geoloc.latitude)},
			"_process" : function(){
				var urlstr =  "www.chizumaru.com/maplink.asp?SER=all&D=all&" + this.query();
				urlstr     += "&SCL=500";
				return urlstr;
			}
		},
		"msnmap" : {
			"query"    : function(){return "C=" + this.format(this.geoloc.latitude) + "," + this.format(this.geoloc.longitude)},
			"_process" : function(){return "maps.msn.com/map.aspx?" + this.query() + "&L=USA&A=6"}
		},
		"msnlive" : {
			"function" : function(value){return sprintf("%.6f",value)},
			"query"    : function(){return "cp=" + this.format(this.geoloc.latitude) + "~" + this.format(this.geoloc.longitude)},
			"_process" : function(){return "local.live.com/default.aspx?v=2&" + this.query() + "&style=r&lvl=12"}
		},
		"msnmapjapan" : {
			"format"   : function(value){
				var dms = new deg2dms(value);
				return sprintf("%d.%02d.%04.1f",Math.abs(dms.degint),dms.minint,dms.secfloat);
			},
			"query"    : function(){return "la=" + this.format(this.geoloc.longitude) + "&lg=" + this.format(this.geoloc.latitude)},
			"_process" : function(){return "map.msn.co.jp/mapmarking.armx?mode=1&" + this.query() + "&zm=9&smode=1"}
		},
		"mapquest" : {
			"query"    : function(){return "latitude=" + this.format(this.geoloc.latitude) + "&longitude=" + this.format(this.geoloc.longitude)},
			"_process" : function(){return "www.mapquest.com/maps/map.adp?searchtype=address&formtype=latlong&latlongtype=decimal&" + this.query()}
		},
		"geohack" : {
			"function" : function(value){return sprintf("%.5f",Math.abs(value))},
			"query"    : function(){return "params=" + this.format(this.geoloc.latitude) + (this.geoloc.latitude >=0 ? "_N_" : "_S_") + this.format(this.geoloc.longitude) + (this.geoloc.longitude >=0 ? "_E" : "_W")},
			"_process" : function(){return "tools.wikimedia.de/~magnus/geo/geohack.php?" + this.query()}
		},
		"kokorade" : {
			"qr"         : 1,
			"format"     : function(value){
				var retval = sprintf("%11.6f",value);
				return retval.replace(/[\s\.]/g, "");
			},
			"query"      : function(){return "lat=" + this.format(this.geoloc.latitude) + "&lon=" + this.format(this.geoloc.longitude)},
			"_process"   : function(){
				var urlstr =  "saya.s145.xrea.com/x/kkrdm.cgi?";
				urlstr     += this.query() + "&zm=2000";
				return urlstr;
			}
		},
		"doodle" : {
			"_process"   : function(){
				var urlstr =  "doodle.st/k/maps.php?lat=" + this.geoloc.latitude + "&lon=" + this.geoloc.longitude + "&cflg=1";
				return urlstr;
			}
		},
		"dokoiku" : {
			"_process"   : function(){
				var urlstr =  "map.doko.jp/m/" + Math.floor((this.geoloc.longitude-0)*60*60*1000) + "/" + Math.floor((this.geoloc.latitude-0)*60*60*1000) + "/10/";
				return urlstr;
			}
		},
		"nissan" : {
			"poix"	     : 1,
			"_process"   : function(){
				var info = prompt("カーナビに送信するメールアドレスを入力してください",prefs.getString("navimailaddr"));
				if (info==null) {
					return(""); // Cancel.
				}else{
					var emadstr=info.split("@");
					if(emadstr.length !=2) return("");
					
					prefs.set("navimailaddr", info);
					var urlstr =  "map.surf.gs/util/poixmail.php?emp=" + emadstr[0] + "&ems=" + emadstr[1] + "&lat=" + this.geoloc.latitude + "&lon=" + this.geoloc.longitude;
					return urlstr;
				}
			}
		},
		"honda" : {
			"base"   : "nissan"
		},
		"pioneer" : {
			"base"   : "nissan"
		},
		"clarion" : {
			"base"   : "nissan"
		},
		"navito" : {
			"scheme"     : "navito:",
			"_process"   : function(){return this.geoloc.locapoint}
		},
		"navitoop" : {
			"base"       : "navito",
			"_process"   : function(){return "option"}
		},
		"np_mapion" : {
			"netprint" : 1,	
			"scheme"     : "mailto:",
			"_process"   : function(){
				var printwebsite="mapion";
				var urlstr = "mapsurfer-mobileprint" + "@" + "surf.gs?subject=" + this.geoloc.locapoint + "-" + printwebsite + "&body=";
				urlstr += "You MUST read 'Term of Use of NetPrint' carefully and AGREE it. ";
				urlstr += "If you don't agree, DO NOT SEND this email. \n";
				urlstr += "\n\n Term of Use is here http://map.surf.gs/util/netprintcond.html";
				urlstr += "\n\n\n               In Japanese-->";
				urlstr += "必ず以下のリンクのネットプリント利用規約を確認の上、規約に同意する場合はこのメールをそのまま送信してください。";
				urlstr += "\n";
				urlstr += "ネットプリントへの地図画像送信後、折り返しメールが着きます。\n同意しない場合は本メールを送信しないでください。";
				urlstr += "\n";
				urlstr += "\n\nネットプリント利用規約"
				urlstr += "\n　http://map.surf.gs/util/netprintcond.html";
				return urlstr;
			}
		},
		"np_mapfan" : {
			"netprint" : 1,
			"scheme"     : "mailto:",
			"_process"   : function(){
				var printwebsite="mapfan";
				var urlstr = "mapsurfer-mobileprint" + "@" + "surf.gs?subject=" + this.geoloc.locapoint + "-" + printwebsite + "&body=";
				urlstr += "You MUST read 'Term of Use of NetPrint' carefully and AGREE it. ";
				urlstr += "If you don't agree, DO NOT SEND this email. \n";
				urlstr += "\n\n Term of Use is here http://map.surf.gs/util/netprintcond.html";
				urlstr += "\n\n\n               In Japanese-->";
				urlstr += "必ず以下のリンクのネットプリント利用規約を確認の上、規約に同意する場合はこのメールをそのまま送信してください。";
				urlstr += "\n";
				urlstr += "ネットプリントへの地図画像送信後、折り返しメールが着きます。\n同意しない場合は本メールを送信しないでください。";
				urlstr += "\n";
				urlstr += "\n\nネットプリント利用規約"
				urlstr += "\n　http://map.surf.gs/util/netprintcond.html";
				return urlstr;
			}
		},
		"np_googlemaps" : {
			"netprint" : 1,
			"scheme"     : "mailto:",
			"_process"   : function(){
				var printwebsite="google";
				var urlstr = "mapsurfer-mobileprint" + "@" + "surf.gs?subject=" + this.geoloc.locapoint + "-" + printwebsite + "&body=";
				urlstr += "You MUST read 'Term of Use of NetPrint' carefully and AGREE it. ";
				urlstr += "If you don't agree, DO NOT SEND this email. \n";
				urlstr += "\n\n Term of Use is here http://map.surf.gs/util/netprintcond.html";
				urlstr += "\n\n\n               In Japanese-->";
				urlstr += "必ず以下のリンクのネットプリント利用規約を確認の上、規約に同意する場合はこのメールをそのまま送信してください。";
				urlstr += "\n";
				urlstr += "ネットプリントへの地図画像送信後、折り返しメールが着きます。\n同意しない場合は本メールを送信しないでください。";
				urlstr += "\n";
				urlstr += "\n\nネットプリント利用規約"
				urlstr += "\n　http://map.surf.gs/util/netprintcond.html";
				return urlstr;
			}
		},

		"nasaworldwind" : {
			"base"       : "kokorade",
			"scheme"     : "worldwind://",
			"format"     : function(value){return sprintf("%.5f",value)},
			"_process"   : function() {return "goto/world=Earth&" + this.query() + "&alt=5799&dir=71&tilt=67"}
		}
	};
	function getMapData(mapsite,key){
		var Target = MapData[mapsite];
		return typeof(Target[key]) == "undefined" ? getMapData(typeof(Target["base"]) == "undefined" ? "default" : Target["base"] ,key) : Target[key];
	}
	function MapClass(mapsite,geoloc){
		this.geoloc = geoloc;
		this.process = function() {
			if (this.tokyo) this.geoloc = WGS84toTOKYO(this.geoloc);
			return this.scheme + this._process();
		};
		for (var i in MapData["default"]){
			this[i] = getMapData(mapsite,i);
		}
	}
	function MapURL(locapoint,mapsite) {
		var geoloc = Locapoint2LatLon(locapoint);
		var MapObj = new MapClass(mapsite,geoloc);
		return MapObj.process();
	}
	function CreateUrlQR(locapoint, mapsite){
		var url = encodeURIComponent(MapURL(locapoint,mapsite));
		document.getElementById("outarea").innerHTML = 
        		"<img src=\"http://tatamilab.jp/~yuugo/cgi/qr/?q=" + url + "\" />";
	}
	function surf(){
		var mapsite = document.getElementById("map_id").value;
		var whattodo = document.getElementById("whattodo").value;
		var locapoint = document.getElementById("displocapo").innerHTML;

		//Google Analytics Tracking
		_IG_Analytics('UA-1146526-1', '/mapsurfer/' + msfrversion + '/' + mapsite + '/' + whattodo);

		if (getMapData(mapsite,"qr")){//QR
			if(whattodo=="emailurl"){
				OpenMail(locapoint, mapsite);
			}else if(whattodo=="dispurl"){
				CreateUrlDisp(locapoint, mapsite);
			}else{
				var url = encodeURIComponent(MapURL(locapoint,mapsite));
				document.getElementById("outarea").innerHTML = 
		        		"<img src=\"http://tatamilab.jp/~yuugo/cgi/qr/?q=" + url + "\" />";
			}
		//}else if (getMapData(mapsite,"poix")){//POIXメールを送る
		//メルアド入力
		//	
		//POIX呼ぶ
		//	document.getElementById("outarea").innerHTML ="";
		//}else if (getMapData(mapsite,"netprint")){//ネットプリントへ接続
		//	OpenMapURL(locapoint, mapsite);
		}else{//その他。Webサイトを開く
			if(whattodo=="emailurl"){
				OpenMail(locapoint, mapsite);
			}else if(whattodo=="dispurl"){
				CreateUrlDisp(locapoint, mapsite);
			}else{
				OpenMapURL(locapoint, mapsite);
				document.getElementById("outarea").innerHTML ="";
			}
		}
	}
	function mapidOnClick(){
		prefs.set("mapid", document.getElementById("map_id").value);
	}

	// To Select Map vendor, set "?mapsite=******" as above
	//	--PARAMETER--		--MAP SITE Name--	--Region--
	//	"googlemaps"		Google Maps (default)	World wide
	//	"googlemapsjapan"	Google Maps Japan	World wide
	//	"googlemapsuk"		Google Maps UK		World wide	
	//	"mapquest"		Map Quest		USA only
	//	"yahoomap"		Yahoo! Map		USA onlu
	//	"msnmap"		MSN Map and Directions	USA only
	//	"mapion"		Mapion			Japan only
	//	"mapionbb"		Mapion 			Japan only
	//	"navitime"		Navitime		Japan only
	//	"mapfan"		MapFan			Japan only
	//	"yahoomapjapan"		Yahoo! Japan Map	Japan only
	//	"itsmoguide"		It's-mo Guide (zenrin)	Japan only
	//	"goomap"		Goo Map			Japan only
	//	"livedoormap"		Livedoor Map		Japan only
	//	"chizumaru"		Chizumaru		Japan only
	//	"msnmapjapan"		MSN Japan Map		Japan only
	//	"googleearth"		Google Earth		World Wide
	//	"geohacks"
	//	"navito:"
	///////////////////////////////////////////////////////////////////////////

	function OpenMapURL(locapoint, mapsite){
		var urlstr = MapURL(locapoint,mapsite);
		//alert(urlstr);
		if (urlstr.match(/^http/)) {
			window.open(urlstr);
		} else {
			//alert(urlstr);
			location.href = urlstr;
		}
	}
	function OpenMail(locapoint, mapsite){
		var urlstr = encodeURIComponent(MapURL(locapoint,mapsite));
		var optionel=document.getElementById("map_id");
		for(var n=0; n<optionel.options.length; n++){
			if(optionel.options[n].selected){
				var optionName="optionel.options[n].text";
				break;
			}
		}
		var locationstring = 'mai' + 'lto:' + '?subject=Your Map URL (by Map Surfer)' + "&body=" + urlstr;
		window.location.replace(locationstring);
	}
	function CreateUrlDisp(locapoint, mapsite){
		var url = MapURL(locapoint,mapsite);
		var optionel=document.getElementById("map_id");
		for(var n=0; n<optionel.options.length; n++){
			if(optionel.options[n].selected){
				var optionName=optionel.options[n].text;
				break;
			}
		}
		document.getElementById("outarea").innerHTML = 
        		"<span>" + optionName + " を開くURL</span><br /><textarea name='urldisp' id='urldisp' style='width:100%' onclick='this.select()'>" + url + "</textarea>";
	}

	function WGS84toTOKYO(geoloc){
		var geolocTokyo = new Object();
		geolocTokyo.latitude = geoloc.latitude -0 + 0.00010696 * geoloc.latitude - 0.000017467 * geoloc.longitude - 0.004602;
	    	geolocTokyo.longitude = geoloc.longitude -0 + 0.000046047 * geoloc.latitude -0 + 0.000083049 * geoloc.longitude - 0.010041;
		return(geolocTokyo);
	}
	function deg2dms(degree){
		this.degfloat = degree;
		this.degabs   = Math.abs(degree);
		this.degint   = Math.floor(this.degabs) * (degree < 0 ? -1 : 1);
		this.minfloat = Math.abs(degree - this.degint) * 60;
		this.minint   = Math.floor(this.minfloat);
		this.secfloat = (this.minfloat - this.minint) *60;
	}
	//common functions
	function Locapoint2LatLon(locapoint){
		var geoloc = new Object();
		geoloc.locapoint = locapoint;
		geoloc.latitude =(
			((locapoint.charCodeAt(0)-65)*1757600
			+(locapoint.charCodeAt(1)-65)*67600
			+(locapoint.charCodeAt(2)-48)*6760
			+(locapoint.charCodeAt(8)-65)*260
			+(locapoint.charCodeAt(9)-65)*10
			+(locapoint.charCodeAt(10)-48))
			*180/45697600-90).toFixed(6);
		geoloc.longitude = (
			((locapoint.charCodeAt(4)-65)*1757600
			+(locapoint.charCodeAt(5)-65)*67600
			+(locapoint.charCodeAt(6)-48)*6760
			+(locapoint.charCodeAt(12)-65)*260
			+(locapoint.charCodeAt(13)-65)*10
			+(locapoint.charCodeAt(14)-48) )
			*360/45697600-180).toFixed(6);
		return(geoloc);
	}
	function LatLon2LocaPoint(lat, lon){
		var latstep=Math.floor(((lat-(-90))*45697600/180));
		var lngstep=Math.floor(((lon-(-180))*45697600/360));
		var locapoint=String.fromCharCode(
			Math.floor(latstep/1757600%26)+65,
			Math.floor(latstep/67600%26)+65,
			Math.floor(latstep/6760%10)+48,
			46,
			Math.floor(lngstep/1757600%26)+65,
			Math.floor(lngstep/67600%26)+65,
			Math.floor(lngstep/6760%10)+48,
			46,
			Math.floor(latstep/260%26)+65,
			Math.floor(latstep/10%26)+65,
			Math.floor(latstep%10)+48,
			46,
			Math.floor(lngstep/260%26)+65,
			Math.floor(lngstep/10%26)+65,
			Math.floor(lngstep%10)+48
		); 
		return(locapoint);
	}

	function rebuildSelection(){
		var whattodo = document.getElementById("whattodo").value;
		prefs.set("whattodo", whattodo);

		var targetspan = '';
		targetspan += '<select size="1" name="map_id" id="map_id" onclick="mapidOnClick()">';


		switch (whattodo) {
			case	"openurl":

				targetspan += '<option value="yahoomap">Yahoo! 地図(米国)</option>';
				targetspan += '<option value="msnlive">ウィンドウズ ライブ！(全世界)</option>';
				targetspan += '<option value="mapquest">マップ･クエスト(米国)</option>';
				targetspan += '<option value="msnmap">ＭＳＮマップ(米国)</option>';
				targetspan += '<option value="mapion">マピオン(日本)</option>';
				targetspan += '<option value="mapionbb">マピオンＢＢ(日本)</option>';
				targetspan += '<option value="alpslab">アルプスラボ(日本)</option>';
				targetspan += '<option value="navitime">ナビタイム(日本)</option>';
				targetspan += '<option value="mapfan">マップファン(日本)</option>';
				targetspan += '<option value="yahoomapjapan">Yahoo!地図(日本)</option>';
				targetspan += '<option value="itsmoguide">ゼンリン It\'s-moガイド(日本)</option>';
				targetspan += '<option value="goomap">Goo地図(日本)</option>';
				targetspan += '<option value="livedoormap">ライブドア地図(日本)</option>';
				targetspan += '<option value="chizumaru">ちず丸(日本)</option>';
				targetspan += '<option value="msnmapjapan">MSN地図(日本)</option>';
				targetspan += '<option value="googlemaps">グーグルマップ(全世界)</option>';
				targetspan += '<option value="googlemapsjapan">グーグルマップ(日本語)(全世界)</option>';
				break;
			case	"mobilesite":
				targetspan += '<option value="mapsurfmobile">マップサーファー携帯版</option>';
				targetspan += '<option value="googlemobilejapan">グーグルローカルモバイル</option>';
				targetspan += '<option value="kokorade">ここらで</option>';
				targetspan += '<option value="mapionmobile">マピオンモバイル</option>';
				targetspan += '<option value="mapfanmobile">ケータイ地図MapFan</option>';
				targetspan += '<option value="itsmonavi">ゼンリン It\'s-moナビ</option>';
				break;
			case	"infosite":
				targetspan += '<option value="geohack">Geo Hack (地図へのリンク集)</option>';
				targetspan += '<option value="dokoiku">ドコイク？</option>';
				targetspan += '<option value="doodle">Doodle(ドゥードゥル)</option>';
				break;
			case	"emailurl":
				targetspan += '<option disabled>---地図サイト-----</option>';
				targetspan += '<option value="yahoomap">Yahoo! 地図(米国)</option>';
				targetspan += '<option value="msnlive">ウィンドウズ ライブ！(全世界)</option>';
				targetspan += '<option value="mapquest">マップ･クエスト(米国)</option>';
				targetspan += '<option value="msnmap">ＭＳＮマップ(米国)</option>';
				targetspan += '<option value="mapion">マピオン(日本)</option>';
				targetspan += '<option value="mapionbb">マピオンＢＢ(日本)</option>';
				targetspan += '<option value="alpslab">アルプスラボ(日本)</option>';
				targetspan += '<option value="navitime">ナビタイム(日本)</option>';
				targetspan += '<option value="mapfan">マップファン(日本)</option>';
				targetspan += '<option value="yahoomapjapan">Yahoo!地図(日本)</option>';
				targetspan += '<option value="itsmoguide">ゼンリン It\'s-moガイド(日本)</option>';
				targetspan += '<option value="goomap">Goo地図(日本)</option>';
				targetspan += '<option value="livedoormap">ライブドア地図(日本)</option>';
				targetspan += '<option value="chizumaru">ちず丸(日本)</option>';
				targetspan += '<option value="msnmapjapan">MSN地図(日本)</option>';
				targetspan += '<option value="googlemaps">グーグルマップ(全世界)</option>';
				targetspan += '<option value="googlemapsjapan">グーグルマップ(日本語)(全世界)</option>';
				targetspan += '<option disabled>---ケータイ用サイト-----</option>';
				targetspan += '<option value="googlemobilejapan">グーグルローカルモバイル</option>';
				targetspan += '<option value="kokorade">ここらで</option>';
				targetspan += '<option value="mapionmobile">マピオンモバイル</option>';
				targetspan += '<option value="mapfanmobile">ケータイ地図MapFan</option>';
				targetspan += '<option value="itsmonavi">ゼンリン It\'s-moナビ</option>';
				targetspan += '<option value="mapsurfmobile">マップサーファー携帯版</option>';
				targetspan += '<option disabled>---情報サイト-----</option>';
				targetspan += '<option value="dokoiku">ドコイク？</option>';
				targetspan += '<option value="doodle">Doodle(ドゥードゥル)</option>';
				targetspan += '<option value="geohack">Geo Hack (地図へのリンク集)</option>';
				targetspan += '<option disabled>---アプリケーション---</option>';
				targetspan += '<option value="googleearth">グーグル・アース</option>';
				targetspan += '<option value="googlesky">グーグル・スカイ！</option>';
				targetspan += '<option value="nasaworldwind">NASA ワールド・ウィンド</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替）(開発中！)</option>';
				targetspan += '<option value="nasa2moon" disabled>NASA W.W.(月へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2jupter" disabled>NASA W.W.(木星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2vinus" disabled>NASA W.W.(金星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2marcury" disabled>NASA W.W.(水星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2space" disabled>NASA W.W.(宇宙へ切替)(開発中！)</option>';
				targetspan += '<option value="navito">Navitoゲートウェイ</option>';
				targetspan += '<option value="navitoop">Navitoゲートウェイ(オプション)</option>';
				break;
			case	"carnavi":
				targetspan += '<option value="nissan">日産「CarWings」</option>';
				targetspan += '<option value="honda">本田「インターナビ」</option>';
				targetspan += '<option value="pioneer">カロッツェリア「Air Navi」</option>';
				targetspan += '<option value="clarion">クラリオン「AutoPC CADIAS」</option>';
				targetspan += '<option value="ecrips" disabled>富士通テン「エクリプス」(開発中！)</option>';
				break;
			case	"appli":
				targetspan += '<option value="googleearth">グーグル・アース</option>';
				targetspan += '<option value="googlesky">グーグル・スカイ！</option>';
				targetspan += '<option value="nasaworldwind">NASA ワールド・ウィンド</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替）(開発中！)</option>';
				targetspan += '<option value="nasa2moon" disabled>NASA W.W.(月へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2jupter" disabled>NASA W.W.(木星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2vinus" disabled>NASA W.W.(金星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2marcury" disabled>NASA W.W.(水星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2space" disabled>NASA W.W.(宇宙へ切替)(開発中！)</option>';
				targetspan += '<option value="navito">Navitoゲートウェイ</option>';
				targetspan += '<option value="navitoop">Navitoゲートウェイ(オプション)</option>';
				break;
			case	"netprint":
				targetspan += '<option value="np_mapion">マピオンを印刷</option>';
				targetspan += '<option value="np_mapfan">マップファンを印刷</option>';
				targetspan += '<option value="np_googlemaps">グーグルマップを印刷</option>';
				break;
			case	"dispurl":
				targetspan += '<option value="yahoomap">Yahoo! 地図(米国)</option>';
				targetspan += '<option value="msnlive">ウィンドウズ ライブ！(全世界)</option>';
				targetspan += '<option value="mapquest">マップ･クエスト(米国)</option>';
				targetspan += '<option value="msnmap">ＭＳＮマップ(米国)</option>';
				targetspan += '<option value="mapion">マピオン(日本)</option>';
				targetspan += '<option value="mapionbb">マピオンＢＢ(日本)</option>';
				targetspan += '<option value="alpslab">アルプスラボ(日本)</option>';
				targetspan += '<option value="navitime">ナビタイム(日本)</option>';
				targetspan += '<option value="mapfan">マップファン(日本)</option>';
				targetspan += '<option value="yahoomapjapan">Yahoo!地図(日本)</option>';
				targetspan += '<option value="itsmoguide">ゼンリン It\'s-moガイド(日本)</option>';
				targetspan += '<option value="goomap">Goo地図(日本)</option>';
				targetspan += '<option value="livedoormap">ライブドア地図(日本)</option>';
				targetspan += '<option value="chizumaru">ちず丸(日本)</option>';
				targetspan += '<option value="msnmapjapan">MSN地図(日本)</option>';
				targetspan += '<option value="googlemaps">グーグルマップ(全世界)</option>';
				targetspan += '<option value="googlemapsjapan">グーグルマップ(日本語)(全世界)</option>';
				targetspan += '<option value="googlemobilejapan">グーグルローカルモバイル</option>';
				targetspan += '<option value="kokorade">ここらで</option>';
				targetspan += '<option value="mapionmobile">マピオンモバイル</option>';
				targetspan += '<option value="mapfanmobile">ケータイ地図MapFan</option>';
				targetspan += '<option value="itsmonavi">ゼンリン It\'s-moナビ</option>';
				targetspan += '<option value="mapsurfmobile">マップサーファー携帯版</option>';
				targetspan += '<option value="dokoiku">ドコイク？</option>';
				targetspan += '<option value="doodle">Doodle(ドゥードゥル)</option>';
				targetspan += '<option value="geohack">Geo Hack (地図へのリンク集)</option>';
				targetspan += '<option value="googleearth">グーグル・アース</option>';
				targetspan += '<option value="googlesky">グーグル・スカイ！</option>';
				targetspan += '<option value="nasaworldwind">NASA ワールド・ウィンド</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替）(開発中！)</option>';
				targetspan += '<option value="nasa2moon" disabled>NASA W.W.(月へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2jupter" disabled>NASA W.W.(木星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2vinus" disabled>NASA W.W.(金星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2marcury" disabled>NASA W.W.(水星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2space" disabled>NASA W.W.(宇宙へ切替)(開発中！)</option>';
				targetspan += '<option value="navito">Navitoゲートウェイ</option>';
				targetspan += '<option value="navitoop">Navitoゲートウェイ(オプション)</option>';
				break;
			default:
				targetspan += '<option disabled>---地図サイトを開く---</option>';
				targetspan += '<option value="yahoomap">Yahoo! 地図(米国)</option>';
				targetspan += '<option value="msnlive">ウィンドウズ ライブ！(全世界)</option>';
				targetspan += '<option value="mapquest">マップ･クエスト(米国)</option>';
				targetspan += '<option value="msnmap">ＭＳＮマップ(米国)</option>';
				targetspan += '<option value="mapion">マピオン(日本)</option>';
				targetspan += '<option value="mapionbb">マピオンＢＢ(日本)</option>';
				targetspan += '<option value="alpslab">アルプスラボ(日本)</option>';
				targetspan += '<option value="navitime">ナビタイム(日本)</option>';
				targetspan += '<option value="mapfan">マップファン(日本)</option>';
				targetspan += '<option value="yahoomapjapan">Yahoo!地図(日本)</option>';
				targetspan += '<option value="itsmoguide">ゼンリン It\'s-moガイド(日本)</option>';
				targetspan += '<option value="goomap">Goo地図(日本)</option>';
				targetspan += '<option value="livedoormap">ライブドア地図(日本)</option>';
				targetspan += '<option value="chizumaru">ちず丸(日本)</option>';
				targetspan += '<option value="msnmapjapan">MSN地図(日本)</option>';
				targetspan += '<option value="googlemaps">グーグルマップ(全世界)</option>';
				targetspan += '<option value="googlemapsjapan">グーグルマップ(日本語)(全世界)</option>';
				targetspan += '<option disabled>---ケータイ用QRコード作成-----</option>';
				targetspan += '<option value="googlemobilejapan">グーグルローカルモバイル</option>';
				targetspan += '<option value="kokorade">ここらで</option>';
				targetspan += '<option value="mapionmobile">マピオンモバイル</option>';
				targetspan += '<option value="mapfanmobile">ケータイ地図MapFan</option>';
				targetspan += '<option value="itsmonavi">ゼンリン It\'s-moナビ</option>';
				targetspan += '<option value="mapsurfmobile">マップサーファー携帯版</option>';
				targetspan += '<option disabled>---情報サイトを開く-----</option>';
				targetspan += '<option value="geohack">Geo Hack (地図へのリンク集)</option>';
				targetspan += '<option value="dokoiku">ドコイク？</option>';
				targetspan += '<option value="doodle">Doodle(ドゥードゥル)</option>';
				targetspan += '<option disabled>---アプリケーションを開く---</option>';
				targetspan += '<option value="googleearth">グーグル・アース</option>';
				targetspan += '<option value="googlesky">グーグル・スカイ！</option>';
				targetspan += '<option value="nasaworldwind">NASA ワールド・ウィンド</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替）(開発中！)</option>';
				targetspan += '<option value="nasa2moon" disabled>NASA W.W.(月へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2earth" disabled>NASA W.W.(地球へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2jupter" disabled>NASA W.W.(木星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2vinus" disabled>NASA W.W.(金星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2marcury" disabled>NASA W.W.(水星へ切替)(開発中！)</option>';
				targetspan += '<option value="nasa2space" disabled>NASA W.W.(宇宙へ切替)(開発中！)</option>';
				targetspan += '<option value="navito">Navitoゲートウェイ</option>';
				targetspan += '<option value="navitoop">Navitoゲートウェイ(オプション)</option>';
				targetspan += '<option disabled>---カーナビに送る---/option>';
				targetspan += '<option value="nissan">日産「CarWings」</option>';
				targetspan += '<option value="honda">本田「インターナビ」</option>';
				targetspan += '<option value="pioneer">カロッツェリア「Air Navi」</option>';
				targetspan += '<option value="clarion">クラリオン「AutoPC CADIAS」</option>';
				targetspan += '<option value="ecrips" disabled>富士通テン「エクリプス」(開発中！)</option>';
				targetspan += '<option disabled>---ネットプリント（セブンイレブン）へ送る---</option>';
				targetspan += '<option value="np_mapion">マピオンを印刷</option>';
				targetspan += '<option value="np_mapfan">マップファンを印刷</option>';
				targetspan += '<option value="np_googlemaps">グーグルマップを印刷</option>';
		}
		targetspan += '</select>';
		if(whattodo=="netprint"){
			targetspan +="<br />ネットプリント(セブンイレブン)へ送信します。<br /><a href=\"javascript:void(window.open('http://www.sej.co.jp/index.html'))\">セブンイレブン店舗検索</a>はこちらから";
		}else if(whattodo=="appli"){
			targetspan +="<font size=\"1\"><br />該当するアプリケーションがインストールされている場合に限ります。<br />地球以外の場所についてはエンターテイメントで、緯度経度(赤緯赤経)の値が同じ場所に飛ぶだけです。元の場所とは何の関連もありませんので予めご了承ください。</font>";
		}
		document.getElementById("mapidSelection").innerHTML=targetspan;
	}


 /** 
 * 
 *  Javascript sprintf 
 *  http://www.webtoolkit.info/ 
 * 
 * 
 **/  
   
 sprintfWrapper = {  
   
     init : function () {  
   
         if (typeof arguments == "undefined") { return null; }  
         if (arguments.length < 1) { return null; }  
         if (typeof arguments[0] != "string") { return null; }  
         if (typeof RegExp == "undefined") { return null; }  
   
         var string = arguments[0];  
         var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);  
         var matches = new Array();  
         var strings = new Array();  
         var convCount = 0;  
         var stringPosStart = 0;  
         var stringPosEnd = 0;  
         var matchPosEnd = 0;  
         var newString = '';  
         var match = null;  
   
         while (match = exp.exec(string)) {  
             if (match[9]) { convCount += 1; }  
   
             stringPosStart = matchPosEnd;  
             stringPosEnd = exp.lastIndex - match[0].length;  
             strings[strings.length] = string.substring(stringPosStart, stringPosEnd);  
   
             matchPosEnd = exp.lastIndex;  
             matches[matches.length] = {  
                 match: match[0],  
                 left: match[3] ? true : false,  
                 sign: match[4] || '',  
                 pad: match[5] || ' ',  
                 min: match[6] || 0,  
                 precision: match[8],  
                 code: match[9] || '%',  
                 negative: parseInt(arguments[convCount]) < 0 ? true : false,  
                 argument: String(arguments[convCount])  
             };  
         }  
         strings[strings.length] = string.substring(matchPosEnd);  
   
         if (matches.length == 0) { return string; }  
         if ((arguments.length - 1) < convCount) { return null; }  
   
         var code = null;  
         var match = null;  
         var i = null;  
   
         for (i=0; i<matches.length; i++) {  
   
             if (matches[i].code == '%') { substitution = '%' }  
             else if (matches[i].code == 'b') {  
                 matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));  
                 substitution = sprintfWrapper.convert(matches[i], true);  
             }  
             else if (matches[i].code == 'c') {  
                 matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));  
                 substitution = sprintfWrapper.convert(matches[i], true);  
             }  
             else if (matches[i].code == 'd') {  
                 matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));  
                 substitution = sprintfWrapper.convert(matches[i]);  
             }  
             else if (matches[i].code == 'f') {  
                 matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));  
                 substitution = sprintfWrapper.convert(matches[i]);  
             }  
             else if (matches[i].code == 'o') {  
                 matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));  
                 substitution = sprintfWrapper.convert(matches[i]);  
             }  
             else if (matches[i].code == 's') {  
                 matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)  
                 substitution = sprintfWrapper.convert(matches[i], true);  
             }  
             else if (matches[i].code == 'x') {  
                 matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));  
                 substitution = sprintfWrapper.convert(matches[i]);  
             }  
             else if (matches[i].code == 'X') {  
                 matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));  
                 substitution = sprintfWrapper.convert(matches[i]).toUpperCase();  
             }  
             else {  
                 substitution = matches[i].match;  
             }  
   
             newString += strings[i];  
             newString += substitution;  
   
         }  
         newString += strings[i];  
   
         return newString;  
   
     },  
   
     convert : function(match, nosign){  
         if (nosign) {  
             match.sign = '';  
         } else {  
             match.sign = match.negative ? '-' : match.sign;  
         }  
         var l = match.min - match.argument.length + 1 - match.sign.length;  
         var pad = new Array(l < 0 ? 0 : l).join(match.pad);  
         if (!match.left) {  
             if (match.pad == "0" || nosign) {  
                 return match.sign + pad + match.argument;  
             } else {  
                 return pad + match.sign + match.argument;  
             }  
         } else {  
             if (match.pad == "0" || nosign) {  
                 return match.sign + match.argument + pad.replace(/0/g, ' ');  
             } else {  
                 return match.sign + match.argument + pad;  
             }  
         }  
     }  
 }  
   
 sprintf = sprintfWrapper.init; 


</script>


]]></Content>
</Module>
