
 var ua = navigator.userAgent;
 var ns = ((ua.indexOf("Netscape") > 0) || (ua.indexOf("Firefox") > 0));
 var ie = (ua.indexOf("MSIE") > 0);
 var op = (ua.indexOf("Opera") > 0);

 if (ie) ns=false; else ns=true;
 
var maxstep=50,nstep=0,stepx=0,stepy=0,rullerpth=0, rulerlen;
var rullerpth_last = 0;
var len=0,trx_0=0,try_0=0;
var xr,yr;
var xxr = new Array();
var	yyr = new Array();

 
function DrawSteps(DragX,DragY,ObjPos)
{
	xpi=cx-zoom/2+(DragX-ObjPos.x)*zoom/mapw;
	ypi=cy+zoomh/2-(DragY-ObjPos.y)*zoom/mapw;
	xxr[xxr.length]=xpi;
	yyr[yyr.length]=ypi;
    if(nstep>0) {
        //var pth=(Math.sqrt((stepx-xpi)*(stepx-xpi-dx)+(stepy-ypi-dy)*(stepy-ypi)))/1.76;
		var bl1=Mercator104_OrtoGeo(stepx,stepy);
		var bl2=Mercator104_OrtoGeo(xpi,ypi);
		var pth=OrtoLeng(bl1.b,bl1.l,bl2.b,bl2.l);
        pth=Math.round(pth);
		rullerpth_last = pth;
        rullerpth = rullerpth + pth;
    }
	DrawRuler();
    stepx=xpi;stepy=ypi;
    if(nstep<maxstep-1) nstep=nstep+1;
	nstep++;
}

function DrawLine(x1,y1,x2,y2)
{
  jg.setColor("#ff0000");
  jg.setStroke(2);
  jg.drawLine(x1, y1, x2, y2);
  jg.paint();
}

  function formatNumber(v,dig) {
    var s='';
    v=v.toString();
    for(j=0;j<v.length;j++) {
      if(j<dig) s=s+v.charAt(j); else s=s+'0';
    }
    var vv=new Number(s);
    if(vv>1000) s=vv/1000+' êì'; else s=vv+' ì';
    return s;
  }

  function setRullerVal(value) {
//      document.RullerFrm.elements[0].value=value;
      gE('rulen').innerHTML="<small>&nbsp;"+value+"&nbsp;</small>";
	  gE('rulen').style.zIndex = 501;
  }

  function CreateLay(name,x,y,w,h,bgclr,cont,z,vis) {
    var s;
      s='<div id="'+name+'" style="position:absolute; overflow:none; top:'+y+'px; left:'+x+'px;';
      if(w!=0) s=s+' width:'+w+'px;';
      if(h!=0) s=s+' height:'+h+'px;';
      s=s+' background-color:'+bgclr+'; z-index: '+z+'; visibility:'+(vis?'visible;':'hidden;')+'">';
      document.writeln(s);
      document.writeln(cont);
      document.writeln('</div>');
  }

  function createSteps() {
    var j=0,lay;
    var cont='<img src="images/js_pixel.gif" width=1 height=1>';
    for(j=0;j<maxstep;j++)
      CreateLay('step'+j,0,0,0,0,'#ff0000',cont,2,false);
  }

  function clearLinesAndPnts()
  {
    var j=0,lay;
    for(j=0;j<maxstep;j++) {
      lay=getLayer('step'+j);
      lay.visibility='hidden';
    }
	jg.clear();
  }
  
  function clearSteps() {
    nstep=0;
    rullerpth=0;
	rullerpth_last = 0;
    getLayer('layRuller').visibility='hidden';
	getLayer('ruleid').visibility='hidden';
    setRullerVal('');
	stepx=0;
	stepy=0;
	clearLinesAndPnts();
	xxr = new Array();
	yyr = new Array();
	return false;
  }

  function getLayer(slay) {
      return gE(slay).style;
  }

  function setLayer(lay,x0,y0,x1,y1) {
    if(lay==null) return;
    lay.width=ObjPos.x+mapw-200;
    lay.height=ObjPos.y+maph;
    lay.clip='rect('+y0+' '+x1+' '+y1+' '+x0+')';
  }

  function setLayerXY(lay,x0,y0) {
    if(lay==null) return;

    lay.top=y0;
    lay.left=x0;
  }
  
function getEventPos(evnt){
  var ex, ey;
  if (ns) {
    ex=evnt.clientX;
    ey=evnt.clientY;
  }
  else {
    ex=event.clientX;
    ey=event.clientY;
  }
	return {x:ex,y:ey}
}

  function getPos(el){
	for (var lxx=0,lyy=0;el!=null;)
		lxx+=el.offsetLeft,lyy+=el.offsetTop,el=el.offsetParent;
	return {x:lxx,y:lyy}
}

function DrawRuler()
{
    gE('canv').style.left=0;
    gE('canv').style.top=0;
	if (xxr.length==0) return;
	clearLinesAndPnts();
	var xpi, ypi, xpi1, ypi1;
	for(i=0; i<xxr.length; i++)
	{
		xpi=mapw/2-(cx-xxr[i])*mapw/zoom;
		ypi=maph/2+(cy-yyr[i])*mapw/zoom;
	    var lay=getLayer('step'+i);
    	setLayer(lay,xpi-2+dx,ypi-2+dy,xpi+3+dx,ypi+3+dy);
	    lay.visibility='visible';
		if (i == xxr.length - 1)
		{
			gE("ruleid").style.left = xpi+3+getPos(document.images["map"+phase]).x;
			gE("ruleid").style.top = ypi-18+getPos(document.images["map"+phase]).y;
		};
		if (i!=xxr.length-1)
		{
			xpi1=mapw/2-(cx-xxr[i+1])*mapw/zoom;
			ypi1=maph/2+(cy-yyr[i+1])*mapw/zoom;
			DrawLine(xpi+dx,ypi+dy,xpi1+dx,ypi1+dy);
			//
		}
		//alert(cy+' '+yyr[i])
	}
   	lay=getLayer('layRuller');
	lay.visibility='visible';  
	setLayerXY(lay,xpi+dx+3,ypi+dy-3-15);
	getLayer('ruleid').visibility='visible';
    if(nstep>0) 
        setRullerVal(formatNumber(rullerpth_last,3)+" / "+formatNumber(rullerpth,3));
	else
        setRullerVal('0 ì');
 return true;
}

///////////////////////////////////////////
function lnU(B)
{
	var s=Math.sin(B)*0.081819190843;
	return Math.log(Math.abs(Math.tan(Math.PI/4+B/2)))+0.081819190843/2*Math.log((1-s)/(1+s));
}

function dlnU(B)
{
	var s,c;
	s=Math.sin(B);
	c=Math.cos(B);
	return (1-0.0066943799901)/((1-0.0066943799901*s*s)*c);
}

function Mercator104_OrtoGeo(x,y)
{
	var B0,s,j,B,L;
	L=x/6378137;
	if (Math.abs(L)>Math.PI)
	{
		B=0;
	}
	else
	{
	 	s=y/6378137;
	  	B0=2*(Math.atan(Math.exp(s))-Math.PI/4);
  		B=B0;
  		for (j=0; j<2; j++)
		{
    		B=B0-(lnU(B0)-s)/dlnU(B0);
    		B0=B;
  		}
		B=B/Math.PI*180;
		L=L/Math.PI*180;
  	}
	return {b:B,l:L}
}

function MidleR(B)
{
	var si,w;
	si=Math.sin(B);
	si=si*si;
	w=1-0.0066943799901*si;
	return Math.sqrt(6378137/w*6378137/w*(1-0.0066943799901));
}

function OrtoLeng(B1,L1,B2,L2)
{
	var co;
	B1=B1*Math.PI/180;
	L1=L1*Math.PI/180;
	B2=B2*Math.PI/180;
	L2=L2*Math.PI/180;
	co=Math.sin(B1)*Math.sin(B2)+Math.cos(B1)*Math.cos(B2)*Math.cos(L2-L1);
	return MidleR((B1+B2)/2)*Math.acos(co);
}



