
var debug = false;
var wine;
wine = new Window();
Windows.addObserver({onEndMove: handleEndMove});
var l = 50;//window position
var t = 50;//window position
var sequence = new Array();
var c=new Array();//datas from win

var maxstep=12;// Max nb step
var locked=false;
var last_a=0;
var last_b=0;


//INIT DLIST

var p0_id;
var p1_id;
var p2_id;
var p3_id;
var p4_id;
var p5_id;
var p6_id;
var p7_id;
var p8_id;
var p9_id;
var p10_id;
var p11_id;
var p12_id;


var port_id;
var port_str;


var c;
var dist = new Array();//server distances
var routes = new Array();//server routes
var viacodes = new Array();//server viacodes	
var avoidp = new Array();//avoid piracy
var vias = new Array();//user via
var num=0;//sequence position

var a=0;//port "from" id
var fr="";//port "from" str




function debug()
{	
	//clear();
	
	/*
	var htm="<DIV CLASS=title><TABLE BORDER=1>";
	htm+="<TH>i</TH><TH>port</TH><TH>dist</TH><TH>via</TH><TH>nb</TH>";
	for(var i=0;i<sequence.length;i++)
	{
		htm+="<TR><TD>["+i+"]";
		htm+="<TD WIDTH=200>"+sequence[i][1]+" ("+sequence[i][0]+")\t";//port
		htm+="<TD CLASS=r WIDTH=100>"+sequence[i][4]+"nm";//distance
		htm+="<TD CLASS=c>"+sequence[i][6];//server via
		if(sequence[i][8])nb=sequence[i][8].length; else nb=0;
		htm+="<TD WIDTH=100 CLASS=r>"+nb;//nb coords
		htm+="</TR>";
	}
	msg(htm+"</TABLE></DIV>");
	*/
}




function checkspeed()
{
	var spd = $("speed").value*1;
	if(!spd)spd = 10;
	if( spd < 1 )spd = 10;
	if( spd > 40)spd = 10;
	$("speed").value = spd;
	setDistCookie('cookdist_speed', spd);
}

function checkdraft()
{
	var drf = $("draft").value*1;
	if(!drf)drf = 10;
	if(drf < 1 ) drf = 10;
	if(drf > 30 )drf = 30;
	$("draft").value = drf;
	setDistCookie('cookdist_draft', drf);
}


function set_spd(val,pos)
{
	if(val<1)return;
	sequence[pos][3]=val;
	build();
}

function set_days(val , pos)//SET NB DAYS
{
	if(val<1)return;
	sequence[pos][2]=val;
	build();
}

function plus()//map height++
{
	var hpx = $('map').style.height.replace(/px/, "");
	$('map').style.height = (hpx*1 + 40);
	setDistCookie('map_height', hpx );
}

function minus()//map height--
{
	var hpx = $('map').style.height.replace(/px/, "");
	if(hpx < 300)return;
	$('map').style.height = (hpx*1 - 40);
	setDistCookie('map_height', hpx );
}




function error(htm)
{
	alert( htm );
}

function msg(str)
{
	//$("more").innerHTML = str;//bebug mode only
	window.status = str;
}



function evale(js){//???
	//alert(js);
	eval(js);
}

function onloade()
{
	msg("checking login...");
	new Ajax.Request("check_login.php?&r="+Math.random(), 
	{
		onComplete: function(xhr)
		{
			try{
				eval(xhr.responseText);
			}
			catch(error)
			{
				alert("error:\n" + error +"\n"+ xhr.responseText );
			}
		}
	});
}

function onunloade()
{
	setDistCookie('cookdist_speed', $("speed").value);
	setDistCookie('cookdist_draft', $("draft").value);
}

function setDistCookie (name, value){
	
	var today = new Date() ;
	var expdate = new Date() ;
	expdate.setTime( today.getTime() + ( 365*24*60*60*1000 ) ) ;
	document.cookie = name + "=" + value + ";expires=" + expdate.toGMTString() ;
}

function init_distcookie()//read the cookie 
{
	var slice = document.cookie.split(";");

	for(i=0; i < slice.length; i++){
	
		var vr = slice[i].split("=");
		
		switch(vr[0])
		{
			case "cookdist_speed":
			case " cookdist_speed":
				$("speed").value = vr[1];
				break;
			case "cookdist_draft":
			case " cookdist_draft":
				$("draft").value = vr[1];
				break;
				
			case "map_height":
			case " map_height":
				if(vr[1] > 300 && vr[1] < 1000)$('map').style.height = vr[1];
				break;
				
			default:
				//alert("vr='" + vr + "';");
				break;
		}
	}
	
}

function autoload(){// ONLOAD //
	window.status="autoload";
	init_distcookie();
	build();
	autoFocus();
}



function get_frto( o )
{
	
	if(o.value == "" )return;

	var num = o.id.substr(1, o.id.length-1)*1;
	if(!sequence[num])sequence[num] = new Array();
	
	var fr = $("p" + num ).value;//port strings
	var id = eval(o.id+"_id");

	//window.status = "get_frto() - ID=" + o.id + " - num=" + num + " - fr=" + fr + " - id=" + id;//
	
	if(sequence[num][0] && sequence[num][0]==id)return;//no changes

	if( num > 0 )
	{
		if( sequence[(num-1)][0] == id )
		{
			msg("same port");
			return;//same port
		}
	}

	sequence[num][0] = id;
	sequence[num][1] = fr;

	if(!sequence[num][0]){msg("error : !sequence[num][0]");return;}//id
	if(!sequence[num][1]){msg("error : !sequence[num][1]");return;}//str
	
	build();	
	
	if( num > 0 )
	{
		if(sequence[(num+1)])
		{
			//alert("clear "+(num+1));
			sequence[(num+1)][2]=0;
			sequence[(num+1)][3]=0;
			sequence[(num+1)][4]=0;
			sequence[(num+1)][5]="";
			sequence[(num+1)][6]=new Array();
			sequence[(num+1)][7]=new Array();
			sequence[(num+1)][8]=new Array();
		}else{
			//msg("!sequence["+(num+1)+"]");
		}
		get_dist(num);
	}
	else
	{	
		if(sequence[1])get_dist(1);
		else 
		{
			show_startpoint( id );
			setTimeout("autoFocus()" , 250 );
		}
		
	}

}


function get_dist( num )
{
	//alert("get_dist(num)");

	if(num == 0)
	{
		msg("get_dist() - num==0");
		return;
	}	

	if(!sequence[num]){msg("get_dist() !sequence["+num+"]");return;}

	var a = sequence[(num-1)][0];
	var b = sequence[num][0];
	var v = sequence[num][7];
	port_a= sequence[(num-1)][1];
	port_b= sequence[num][1];

	if( !v )v = "";

	wine = new Window({className: "dialog", width:350, height:200, zIndex: 100, resizable: true, title: "Calculating", draggable:true, wiredDrag: true, minimizable:false, maximizable:false});
	wine.getContent().innerHTML = "<br /><br /><center>Calculating distance from " + port_a + " to " + port_b + "<br />please wait...<br /><img src='gif/hg.gif'><br /><br /><br />"; 
	wine.setStatusBar("Please wait"); 
	wine.setLocation( l, t );//
	wine.show();
	
	locked = true;
	
	msg("get-plots.php?a=" + a + "&b=" + b + "&sid=" + $('sessionId').value );
	
	new Ajax.Request(
	"get-plots.php", 
	{
		method: 'POST', 
		parameters: "a=" + a + "&b=" + b + "&v=" + v,
		onComplete: function(o){
			if(o.responseText)
			{
				if(debug==true)
				{
					msg(o.responseText);//test
					alert(o.responseText);
				}
						
				try
				{
					eval(o.responseText);
					wine.hide();
				}
				catch(e)
				{
					alert("Error :" + e.message + "\n" + o.responseText );
				}
				
				selector( num );//display a number of possible routes
				
				//msg("");
				return;
			}
			else
			{
				alert("error! no responseText");
			}
		}
	});
}




function select_seg(num,segnum){

	if(!sequence[num]){msg("select_seg() !sequence[" + num + "]");return;}

	//console.log("select_seg("+num+","+segnum+")");

	locked = false;

	var current_day=0;
	if(sequence[num][2])current_day=sequence[num][2];

	var current_spd=0;
	if(sequence[num][3])current_spd=sequence[num][3];

	var current_via=new Array();//user via
	if(sequence[num][7])current_via=sequence[num][7];
	
	window.status = "port_id="+port_id+" - port_str="+port_str+" - dist="+dist[segnum];

	var dat = new Array();
	dat[0] =port_id;//PORT_A ID
	dat[1] =port_str;//PORT_A_STR
	dat[2] =current_day;//DAYSINPORT
	dat[3] =current_spd;//SPEED
	dat[4] =dist[segnum];//DISTANCE
	dat[5] =min_draft[segnum];//Min draft for this seg (string)
	dat[6] =viacodes[segnum];//SERVER VIA POINTS
	dat[7] =current_via;//user Via code(s) (Array)
	dat[8] =routes[segnum];//(Array)

	//alert("viacodes="+viacodes[segnum]);
	
	sequence[num]=dat;
	
	via_selected=true;
	build();//reconstruct
	drawline(num);
}



var lblu;
function blu(o){//highlight selection
	if(lblu)lblu.removeClassName("sel");
	$(o).addClassName("sel");
	lblu=o;
}

var via_selected=false;
var port_a;
var port_b;

function selector( num )//PROPOSE MANY ROUTES for step num
{
	
	//alert("selector("+num+")");
	
	via_selected = false;
	
	if(!num)
	{
		msg("selector() !num");
		return;
	}
	
	//msg("selector("+num+")");
	
	if(viacodes.length == 0 )
	{
		return;
	}
	
	if(viacodes.length == 1 )//only one route :)
	{
		select_seg( num , 0 );
		autoFocus();
		return;
	}
	
	var clas = "a";

	var htm = "<table width='100%'>";
	htm+="<th>Via</th>";
	htm+="<th>Min.draft</th>";
	htm+="<th width=60>Distance</th>";
	
	for(var ii=0; ii < viacodes.length; ii++)
	{
		
		htm+= "<tr onclick='select_seg("+num+","+ii+");blu(this);' ondblclick=close_selector() class="+clas+" style='cursor:pointer;padding:2px'>";
		htm+= "<td style='padding:4px;'>";

		var strs = new Array();
		for(var k = 0; k < viacodes[ii].length; k++ )//
		{

			var viaid = viacodes[ii][k];
			if( viaid > 92 )continue;//scotch
			var vp = viap[viaid];//via.js
	
			//Show only Suez, Good hope, Panama, Kiel canal, Skaw are interesting. (obi)x
			if(viaid!=1 && viaid!=2 && viaid!=3 && viaid!=4 && viaid!=6 && viaid!=14)continue;
			if(vp[0])strs[strs.length] = vp[0];
		}

		if(strs.length > 0)htm += strs.join(", ");
		
		//else htm += viap.join(", ");
		
		if(avoidp[ii]==true)htm +=" (avoid piracy zone)";
		
		htm+="</td>";
		htm+="<td class=c>" + min_draft[ii] + "</td>";
		htm+="<td class=r>" + dist[ii] + "nm</td>";
		htm+="</tr>";
		
		if(clas=="a"){clas="b";}else{clas="a";}//toggle classes
	}
	
	
	htm+="</table><br />";

	htm+="<center><button onclick=close_selector() style='width:80'><img src=gif/add.gif align='absmiddle'> Ok </button>";
	
	wine = new Window({className: "dialog", width:450, height:200, zIndex: 100, resizable: true, title: "Select route from '" + port_a + "' to '" + port_b, draggable:true, wiredDrag: true, minimizable:false, maximizable:false});
	wine.getContent().innerHTML = htm;
	wine.setLocation( l, t );//
	wine.setStatusBar("Select a route"); 
	//wine.showCenter();
	wine.show();
	
	//$("selector").show();
	//$("selector").innerHTML = htm;
	
	msg("Select your route");
}



function close_selector()
{
	//alert("num="+num);
	//alert("via="+sequence[num][9]);
	//$("selector").hide();
	if(!via_selected){alert("Select a via");return;}
	wine.hide();
	autoFocus();//set the focus to the next port
}

function remstep(num)
{

	if(!confirm("Remove this step ?"))return;
	
	var nseq = new Array();
	
	for(var i=0; i < sequence.length; i++ )
	{
		if(i!=num)
		{
			nseq[nseq.length]=sequence[i];
		}else{
			msg("pop step: "+i);
		}
	}

	//clear droplist #i
	try
	{
		eval("p"+i+"_id=0;");
	}
	catch(error)
	{
		alert("distance.js Error:"+error);
	}
	sequence = nseq;
	build();
	get_dist( num );
}




function handleEndMove(eventName, win){
	windz = win;
	setTimeout(function(){
		l = parseFloat(windz.element.getStyle('left'));
		t = (parseFloat(windz.element.getStyle('top'))-parseFloat(document.body.scrollTop));
		//console.log("handleEndMove - l="+l+" ; t="+t);
	},20);
}

var currentstep=0;

function pop_login(){
	kill();
	wine = new Window({title: "Login", width:420, height:300, url: 	"login_dialog.php", resizable:true, draggable:true, recenterAuto:true, minimizable:false, maximizable:false, wiredDrag:true});
	wine.showCenter();
	msg("Login");
}

function pop_via(i){

	if(i==0)return;
	
	msg("Select via point");
	kill();
	num=i;
	
	wine = new Window({title: "Select via point(s)", width:200, height:300, left:20, url: 	"via.php", resizable:true, draggable:true, recenterAuto:true, minimizable:true, maximizable:false, wiredDrag:true});
	wine.show();
}

function kill()
{
	wine.hide();
	$("selector").hide();
	document.body.focus();
}






function setfromto(from,to,c){//DRAW "from point" and "to point"

	//from
	var point = new GLatLng(c[0][0], c[0][1]);
	var marker = new GMarker(point,{icon:iconStart, title: from });//icon:iconMole, 
	map.addOverlay(marker);

	//to
	var point = new GLatLng(c[c.length-1][0], c[c.length-1][1]);
	var marker = new GMarker(point,{icon:iconEnd, title: to });//icon:iconMole, 
	map.addOverlay(marker);

}


function get_seg(segnum){//sequence[i]

	var a = sequence[segnum][0];
	var b = sequence[segnum][2];
	var vias = sequence[segnum][7];
	//console.log("vias="+vias);

	if(!a)return;
	if(!b)return;
	if(a < 1)return;
	if(b < 1)return;
	if(a == b)return;

	new Ajax.Request(
	"get-plots2.php", 
	{
		method: 'POST', 
		parameters: "a="+a+"&b="+b+"&v="+vias,

		onComplete: function(o){
			if(o.responseText){
				//alert(o.responseText);
				eval(o.responseText);
				draw_seg(segnum);
			}else{
				alert(o.responseText);
			}
		}
	});
}
