var t=null;
var t1=0;
var goalflag=false;
function starttrc(k){

    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)},2000);
	if(pageTracker) pageTracker._trackPageview('/track/starttrc');

    }
}


function getTraceroute(k){

    new Ajax.Request('result2_sub2.php', 
                     {
			 method: "post",
			     parameters: "key="+k,
			     asynchronous: true,
                         onSuccess: tracerouteReadComplete,
                             onFailure: NN
		     }
		     );

//    $('msg').innerHTML="traceroute測定中.. "+t1;
    t1++;
}

function NN(){
    $('msg').innerHTML+="<br />";
}
// 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;
    var str=xmlObj.getElementsByTagName('route');

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

    var _points=xmlObj.getElementsByTagName('location');
    if(trace_count==_points.length){
	return;
    }

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

    if(goal[0].childNodes[0].nodeValue=="true"){
	goalflag=true;
	firstMkr.hide();
	$('msg').innerHTML="";
	if(t!=null){
	    clearInterval(t);
	    $('go').onclick=null;
	    t=null;
	}
    }
    putMarkers(_points,ips,trace_count,goal);
    
    trace_count=_points.length;

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


function putMarkers(locations,ips,tc){


    for(var i=0;i<locations.length;i++){

	if(i<tc) continue;

        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="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);

	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="IPアドレス:"+ipaddr;
	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/"+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});
        points.push(new google.maps.LatLng(lat,lon));

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

// 右表の各行作成

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

	if(goalflag && i==locations.length-1)
	    htmltip+=" : "+ipaddr+"<div style=\"margin: 0px; margin-left: 20px;\">"+$('goal').childNodes[0].nodeValue+"</div>";
	else if(i==0) 
	    htmltip+=ipstr;
	else 
	    htmltip+=" : "+ipaddr;

	if(i!=0) htmltip+="<div class=\"intbl\" id=\""+whid+"\"></div>";

	htmltip+="</div>";

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

	$(id).style.backgroundColor=(i%2) ? "#ffc" : "#ccf";
	if(i!=0) 	$(whid).innerHTML="";
    }
    
    for(var i=1;i<points.length-1;i++){
	var whid="wh"+i;
	var arg= "domain="+ips[i].childNodes[0].nodeValue+"&japanese=1&head=on&k="+i;

	if($(whid).innerHTML.length < 10 ){
	    new Ajax.Updater(whid, 'whois_result.php', 
			     { method: 'post',
				     parameters: arg,
				     asynchronous:true });
	}
    }
// 地図をセンタリングして終了
    getmax(points);
}

//
// centering map
//

function getmax(p){

    var plg=new google.maps.Polygon(p);
    var b=plg.getBounds();
    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);
};


