var t=null;
var t1=0;
var goalflag=false;
var trcsrv="";
function starttrc(k,ip){

    if(goalflag) return;
    if(t){
	trcstop();
    }else{
	$('go').src="/image/btn-trace_off.gif";
	$('msg').innerHTML="<img src=\"/image/indicator.gif\" id=\"trc\" />";
	t1=0;
	t=setInterval(function(){getTraceroute(k,ip)},2000);
	if(pageTracker)	pageTracker._trackPageview('/track/starttrc');
    }
}


function getTraceroute(k,ip){
    new Ajax.Request('result2_sub2.php', 
                     {
			 method: "post",
			 parameters: "key="+k+"&ip="+ip+"&t="+t1+"&server="+trcsrv,
			 asynchronous: true,
                         onSuccess: tracerouteReadComplete,
                         onFailure: function(){}
		     }
		     );
    t1++;
}

// 90秒でタイムアウト

function trcstop(){
    clearInterval(t);
    t=null;
    $('go').onclick=function(){};

    if(!goalflag && t1>42){
	$('route').innerHTML+="<div class=\"eachip\" id=\"to\">タイムアウトしました。</div>";
	$('msg').innerHTML="";
    }
    t1=0;
    goalflag=true;
}


var points=new Array();
var links=new Array();
var htmls=new Array();
var markers=new Array();

var trace_count=0;

function tracerouteReadComplete(xmlhttp)
{
    if(t1>42  && !goalflag)	trcstop();
    var xmlObj = xmlhttp.responseXML;
    if(trcsrv==""){
	var sv=xmlObj.getElementsByTagName('server');
	trcsrv=sv[0].childNodes[0].nodeValue;
	return;
    }

    if (xmlObj.getElementsByTagName('location')[0] == null) return;
    var pts=xmlObj.getElementsByTagName('location');

    var xx=xmlObj.getElementsByTagName('ptrname');

    
    
    if(trace_count==pts.length)	return;

    var goal=xmlObj.getElementsByTagName('goal');
    var ips=xmlObj.getElementsByTagName('ipAddress');

    if(goal[0].childNodes[0].nodeValue=="true"){
	goalflag=true;
	if(firstMkr) firstMkr.hide(); // 最初からあった旗を消す
	$('msg').innerHTML="";
	if(t!=null){
	    clearInterval(t);
	    $('go').onclick=null;
	    t=null;
	}
    }
    putMarkers(pts,ips,trace_count,xx);
    
    trace_count=pts.length;

    if(t1>43 || goalflag==true){
	$('msg').innerHTML="&nbsp;";
	trcstop();
    }
}


function putMarkers(locations,ips,tc,xx){

    var topLat=-90;
    var topLon=-90;
    for(var i=tc;i<locations.length;i++){

        var location=locations[i];
        var lat = (getElementValue(location, "latitude") == null) ? '' : getElementValue(location, "latitude");
        var lon = (getElementValue(location, "longitude") == null) ? '' : getElementValue(location, "longitude");
        var cityName = (getElementValue(location, "cityName") == null) ? '' : getElementValue(location, "cityName");
        var countryName = (getElementValue(location, "countryName") == null) ? '' : getElementValue(location, "countryName");
        
        if (lat == '' || lon == ''){
                lon = 139.7514;
                lat = 35.685;
        }
        
        if(cityName == '' && countryName.toLowerCase() == "japan"){
                lon = 139.7514;
                lat = 35.685;
	}else if (lon == '' || lat == ''){
	    if (countryName.toLowerCase() == 'japan'){
		lon = 139.7514;
		lat = 35.685;
            }
	}

	var icon=new google.maps.Icon();
	var path=(goalflag && i==locations.length-1) ? "blue" : "red";

	icon.image="/shared/images/marker-"+path+"/marker"+(i+1)+".png";

	icon.iconSize= new google.maps.Size(32,32);
	icon.iconAnchor= new google.maps.Point(16,32);

	var ipaddr=ips[i].childNodes[0].nodeValue;

	var marker=new google.maps.Marker(new google.maps.LatLng(lat,lon),{icon:icon});
	map.addOverlay(marker);
	markers.push(marker);

	var ipstr=ipaddr;
	if(i==0)
	    ipstr="aguse server";
	else if(goalflag && i==locations.length-1)
	    ipstr=$('goal').childNodes[0].nodeValue;

	// バルーン文字列
	var popuphtml="<p class=\"tips\" ><img src=\"/shared/images/marker-"+path+"/marker-list"+(i+1)+".gif\" />   ";

	//0 と goal
	if((i==0) || (goalflag && i==locations.length-1)){
	    popuphtml+=ipstr;
	}else{
	    popuphtml+="IPアドレス: <a href=\"http://www.aguse.jp/?m=w&amp;url="+ipaddr+"\" target=\"_blank\" >"+ipstr+"</a>";
	}
	popuphtml+="<br /><span class=\"info_popup\">"+countryName+"/"+cityName+"</span></p>";

	htmls.push(popuphtml);
	marker.bindInfoWindowHtml(htmls[i],{maxWidth:400});

	if(lat>topLat) topLat=lat;// 一番上は?
        points.push(new google.maps.LatLng(lat,lon));
	topLon=lon;

	var id="p"+i;
	var whid="wh"+i;
	var htmltip="";

// 右表の各行作成
	htmltip="<div id=\""+id+"\" onclick=\"moveCenter("+i+");\"><img class=\"trcnum\" src=\"/shared/images/marker-"+path+"/marker-list"+(i+1)+".gif\" /> ";

	if(i==0){
	    htmltip+=ipstr;
	}else if(goalflag && i==locations.length-1){
	    htmltip+=" : "+ipaddr+"<div class=\"intbl\">"+$('goal').childNodes[0].nodeValue+"</div>";
	    htmltip+="<div class=\"intbl\" id=\""+whid+"\">"+xx[i].childNodes[0].nodeValue+"</div>";
	}else{
	    htmltip+=" : "+ipaddr;
	    htmltip+="<div class=\"intbl\" id=\""+whid+"\">"+xx[i].childNodes[0].nodeValue+"</div>";
	}
	htmltip+="</div>";

	if(i==0)    $('route').innerHTML="";
//追加
	$('route').innerHTML+=htmltip;

	$(id).style.backgroundColor=(i%2) ? "#ffc" : "#ccf";
    }
    
// 地図をセンタリングして終了

    getmax(points,parseFloat(topLat),topLon);

}

//
// centering map
//

function getmax(p,lat,lon){


    var dummy=0;
    var plg=new google.maps.Polygon(p);
    var b=plg.getBounds();

    if(map.getBoundsZoomLevel(b) <= 4) dummy=10;
    else dummy=5;
    dummy=1;

    p.push(new google.maps.LatLng(lat+dummy,lon));

    plg=new google.maps.Polygon(p);
    b=plg.getBounds();

    if(p.length < 5)
	map.setZoom(3);
    else
	map.setZoom(map.getBoundsZoomLevel(b));
    map.panTo(b.getCenter());

}

function moveCenter(i){

     map.panTo(points[i]);
     map.openInfoWindowHtml(markers[i].getLatLng(),htmls[i],{maxWidth:400});
     
};

function removelinks(){
    for(var i=0;i<links.length;i++)
	map.removeOverlay(links[i]);

    var id="p"+(markers.length-1);
    $(id).style.background="#fff";
    
}
function linea(){

    map.setZoom(1);
    var id=points.length-1;

    map.panTo(points[id-2]);

    map.setZoom(2);
    return;


    removelinks();
    var n=0;
    var tim=setInterval(function(){
	    lineb(n);
	    n++;
	    if(n==points.length)
		clearInterval(tim);
	},2500
	);
}

function lineb(i){


    var ll=Array();
    var id1="p"+i;
    var id0="p"+(i-1);

    if(i==0){
	map.setCenter(points[0]);
	$(id1).style.background="#f00";
	return;
    }

    ll=points.slice(i-1,i+1);
    $(id1).style.background="#f00";
    map.setCenter(ll[1]);



    markers[i].setImage("/shared/images/map-receive.png");
    markers[i-1].setImage("/shared/images/map-send.png");
    //    markers[i].zindex=100;






    //    markers[i].openInfoWindowHtml(htmls[i]);

    $(id0).style.background="#fff";
    
    //　後で消せるように
    var l=new google.maps.Polyline(ll,"#c00",2,0.7);
    links.push(l);
    //    map.addOverlay(l);
};



// function setIcon(icon,locations,i){
//     var path="marker-red";
    
//     if(goalflag && i==locations.length-1) path="marker-blue";
    
//     icon.image="/shared/images/"+path+"/marker"+(i+1)+".png";
//     icon.iconSize= new google.maps.Size(32,32);
//     icon.iconAnchor= new google.maps.Point(16,32);
// }

