var addcoordtext='';

function getcoordhint(eve,l,t,w,h)	 {
	if (document.getElementById('coordspan_id'))
		{
		longlat = getcoord(eve,l,t,w,h);
		document.getElementById('coordspan_id').innerHTML=longlat[0][0] + '&deg; ' + longlat[0][1] + '\' ' + longlat[0][2] + '&quot;<br>' + longlat[1][0] + '&deg; ' + longlat[1][1] + '\' ' + longlat[1][2] + '&quot;' + (addcoordtext?('<br><table><tr><td class="redhint">' + addcoordtext + '</td></tr></table>'):'');
		}

}

function setEnvironment()
{
var Brovs = navigator.userAgent.toLowerCase();

if ((Brovs.indexOf('msie')<=0)|| (Brovs.indexOf('opera')>0)){
	BROWSER='Mozilla';} 
// Tested under W3C compatibre Browsers: Netscape 7.1, Mozilla 1.7b (Mozilla/5.0)
// Tested also under Opera 7.20, which is compatible with both MSIE and Mozilla DOM; Mozilla behaviour for Opera chosen
}


function geo2dec(GeoCoordArray) {
	return GeoCoordArray[0] + GeoCoordArray[1]/60.0 + GeoCoordArray[2]/60.0/60;
	}

function dec2geo(DecimalNumber) {
	var GeoCoordArray = new Array(3);
	GeoCoordArray[0] = Math.floor(DecimalNumber);
	DecimalNumber -= GeoCoordArray[0];
	GeoCoordArray[1] = Math.floor(DecimalNumber * 60);
	DecimalNumber -= GeoCoordArray[1]/60;
	GeoCoordArray[2] = Math.round(DecimalNumber * 60 * 60 * 10)/10;
	return GeoCoordArray;
	}


// input:	latGeoCoordArray, lonGeoCoordArray
// output: X, Y.
// Be careful: order changed!! (y,x -> X,Y)
function pointOnMap(latGeoCoordArray, lonGeoCoordArray) { 
var latDec = geo2dec(latGeoCoordArray); 
var lonDec = geo2dec(lonGeoCoordArray); 
	var horizontalScale = (lowerRightLongitude_decimal - upperLeftLongitude_decimal) / parseInt(document.getElementById("mapImage").style.width); 
	var verticalScale = (upperLeftLatitude_decimal - lowerRightLatitude_decimal) / parseInt(document.getElementById("mapImage").style.height); 
	var X = Math.round((lonDec - upperLeftLongitude_decimal ) / horizontalScale); 
	var Y = Math.round((-latDec + upperLeftLatitude_decimal ) / verticalScale); 
	var coordArray = Array(2);
	coordArray[0] = X;
	coordArray[1] = Y;
//alert('x='+X+'y='+Y);	
//alert('coordArray[0]='+coordArray[0]+'coordArray[1]='+coordArray[1]);	
	return coordArray;
} 


function drawPoint(obj,point,radius,color) {
	var latGeoCoordArray = Array(3);
	var lonGeoCoordArray = Array(3);
	for (i = 0; i <3; i++) {
		lonGeoCoordArray[i] = point[i];
		latGeoCoordArray[i] = point[i+3];
	}
	alink = point[6];
	alt = point[7];
	var pointOnMapVar = Array(2);
	pointOnMapVar = pointOnMap(latGeoCoordArray, lonGeoCoordArray);
	obj.setLink(alink,alt); 
	obj.setColor(color); 
	obj.fillEllipse(pointOnMapVar[0]-radius, pointOnMapVar[1]-radius, radius*2, radius*2);
	obj.paint();
	return;
}

function drawLine(obj,startPoint,endPoint,thickness,color) {
	var latGeoCoordArray = Array(3);
	var lonGeoCoordArray = Array(3);
	for (i = 0; i <3; i++) {
		lonGeoCoordArray[i] = startPoint[i];
		latGeoCoordArray[i] = startPoint[i+3];
	}
	startPointOnMapVar = pointOnMap(latGeoCoordArray, lonGeoCoordArray);
	for (i = 0; i <3; i++) {
		lonGeoCoordArray[i] = endPoint[i];
		latGeoCoordArray[i] = endPoint[i+3];
	}
	endPointOnMapVar = pointOnMap(latGeoCoordArray, lonGeoCoordArray);

	if ( ( (startPointOnMapVar[0]<0) && (endPointOnMapVar[0]<0) ) ||( (startPointOnMapVar[0]>540) && (endPointOnMapVar[0]>540) ) ||( (startPointOnMapVar[1]<0) && (endPointOnMapVar[1]<0) ) || ((startPointOnMapVar[1]>540) && (endPointOnMapVar[1]>540) ) )
		return 1;
	if (startPointOnMapVar[0]<0)
		{
		t = endPointOnMapVar[0]/(endPointOnMapVar[0]-startPointOnMapVar[0]);
		startPointOnMapVar[0] = endPointOnMapVar[0] - t*(endPointOnMapVar[0]-startPointOnMapVar[0]);
		startPointOnMapVar[1] = endPointOnMapVar[1] - t*(endPointOnMapVar[1]-startPointOnMapVar[1]);
		}
	if (endPointOnMapVar[0]<0)
		{
		t = startPointOnMapVar[0]/(startPointOnMapVar[0]-endPointOnMapVar[0]);
		endPointOnMapVar[0] = startPointOnMapVar[0] - t*(startPointOnMapVar[0]-endPointOnMapVar[0]);
		endPointOnMapVar[1] = startPointOnMapVar[1] - t*(startPointOnMapVar[1]-endPointOnMapVar[1]);
		}
	if (startPointOnMapVar[0]>540)
		{
		t = (endPointOnMapVar[0]-540)/(endPointOnMapVar[0]-startPointOnMapVar[0]);
		startPointOnMapVar[0] = endPointOnMapVar[0] - t*(endPointOnMapVar[0]-startPointOnMapVar[0]);
		startPointOnMapVar[1] = endPointOnMapVar[1] - t*(endPointOnMapVar[1]-startPointOnMapVar[1]);
		}
	if (endPointOnMapVar[0]>540)
		{
		t = (startPointOnMapVar[0]-540)/(startPointOnMapVar[0]-endPointOnMapVar[0]);
		endPointOnMapVar[0] = startPointOnMapVar[0] - t*(startPointOnMapVar[0]-endPointOnMapVar[0]);
		endPointOnMapVar[1] = startPointOnMapVar[1] - t*(startPointOnMapVar[1]-endPointOnMapVar[1]);
		}

if (startPointOnMapVar[1]<0)
		{
		t = endPointOnMapVar[1]/(endPointOnMapVar[1]-startPointOnMapVar[1]);
		startPointOnMapVar[1] = endPointOnMapVar[1] - t*(endPointOnMapVar[1]-startPointOnMapVar[1]);
		startPointOnMapVar[0] = endPointOnMapVar[0] - t*(endPointOnMapVar[0]-startPointOnMapVar[0]);
		}
	if (endPointOnMapVar[1]<0)
		{
		t = startPointOnMapVar[1]/(startPointOnMapVar[1]-endPointOnMapVar[1]);
		endPointOnMapVar[1] = startPointOnMapVar[1] - t*(startPointOnMapVar[1]-endPointOnMapVar[1]);
		endPointOnMapVar[0] = startPointOnMapVar[0] - t*(startPointOnMapVar[0]-endPointOnMapVar[0]);
		}
	if (startPointOnMapVar[1]>540)
		{
		t = (endPointOnMapVar[1]-540)/(endPointOnMapVar[1]-startPointOnMapVar[1]);
		startPointOnMapVar[1] = endPointOnMapVar[1] - t*(endPointOnMapVar[1]-startPointOnMapVar[1]);
		startPointOnMapVar[0] = endPointOnMapVar[0] - t*(endPointOnMapVar[0]-startPointOnMapVar[0]);
		}
	if (endPointOnMapVar[1]>540)
		{
		t = (startPointOnMapVar[1]-540)/(startPointOnMapVar[1]-endPointOnMapVar[1]);
		endPointOnMapVar[1] = startPointOnMapVar[1] - t*(startPointOnMapVar[1]-endPointOnMapVar[1]);
		endPointOnMapVar[0] = startPointOnMapVar[0] - t*(startPointOnMapVar[0]-endPointOnMapVar[0]);
		}

	alink = endPoint[6];
	alt = endPoint[7];

	obj.setColor(color); 
	obj.setLink(alink,alt);
	obj.setStroke(thickness);
	obj.drawLine(startPointOnMapVar[0],startPointOnMapVar[1],endPointOnMapVar[0],endPointOnMapVar[1]);
	obj.paint();
}

function drawPoints(obj,radius,color) {
	drawnPointsNumber = pointsToBeDrawn.length;
	for (k = 0; k < drawnPointsNumber; k++) {
		drawPoint(obj,pointsToBeDrawn[k],radius,color);
	}
	return;
}

function drawRoute(obj,id,radius,color) {
	// alert('drawnPointsNumber='+drawnPointsNumber);
	drawnPointsNumber = routesToBeDrawn[id].length;
	for (k = 0; k < drawnPointsNumber; k++) {
			if (k < (drawnPointsNumber - 1)) {
				drawLine(obj,routesToBeDrawn[id][k],routesToBeDrawn[id][k+1],radius,color);
			}
	}
	return;
}

function getcoord(eve,l,t,w,h)
{
   var horizontalScale = (lowerRightLongitude_decimal - upperLeftLongitude_decimal) / w;
	var verticalScale = (upperLeftLatitude_decimal - lowerRightLatitude_decimal) / h;
//	alert(horizontalScale);
//	alert(verticalScale);
	var pointLongitude = Array(3); 
   var pointLatitude = Array(3); 
	var clickOffsetX, 	clickOffsetY;

	if (BROWSER=='MSIE') {
		clickOffsetX = eve.offsetX;
		clickOffsetY = eve.offsetY;
		}
	else {
	 clickOffsetX = eve.pageX-l;
	 clickOffsetY = eve.pageY-t;
	}
//	alert('clickOffsetX='+clickOffsetX+' clickOffsetY='+clickOffsetY);

	
	pointLongitude = dec2geo(upperLeftLongitude_decimal + clickOffsetX * horizontalScale);
	pointLatitude = dec2geo(upperLeftLatitude_decimal - clickOffsetY * verticalScale);
	ret = Array(2);
	ret[0] = pointLongitude;
	ret[1] = pointLatitude;
	return ret;
}

function imageOver(imageName) {
document.images[imageName].src = "img/"+imageName+"_over.png";
//document.images['returnImage'].src = "img/return_over.png"
return;
}

function imageOut(imageName) {
document.images[imageName].src = "img/"+imageName+".png";
//document.images['returnImage'].src = "img/return_over.png"
return;
}

function tt_Show_pointsrouteshint(e,t)
	{
	document.getElementById('pointroutehints').innerHTML=document.getElementById(t).innerHTML;
	tt_Show(e,'tt_pointroutehints',ttAbove,0,'',ttLeft,-10,-10,ttStatic,true,60000);
	}

// utility function to retrieve an expiration date in proper
// format; pass three integer parameters for the number of days, hours,
// and minutes from now you want the cookie to expire (or negative
// values for a past date); all three parameters are required,
// so use zeros where appropriate
function getExpDate(days, hours, minutes) {
    var expDate = new Date( );
    if (typeof days == "number" && typeof hours == "number" &&  typeof hours == "number") {
        expDate.setDate(expDate.getDate( ) + parseInt(days));
        expDate.setHours(expDate.getHours( ) + parseInt(hours));
        expDate.setMinutes(expDate.getMinutes( ) + parseInt(minutes));
        return expDate.toGMTString( );
    }
}
   
// utility function called by getCookie( )
function getCookieVal(offset) {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1) {
        endstr = document.cookie.length;
    }
    return unescape(document.cookie.substring(offset, endstr));
}
   
// primary function to retrieve cookie by name
function getCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg) {
            return getCookieVal(j);
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break; 
    }
    return "";
}

// store cookie value with optional details as needed
function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape (value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}
   
// remove the cookie by setting ancient expiration date
function deleteCookie(name,path,domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

function deleteCookie_array(name) {

  var re = new RegExp('^' + name + '\\[\\d*\\]');
  mc = document.cookie.split(' ');
  clen = mc.length;

  var i = 0;
  while (i < clen) {
      m = re.exec(mc[i]);
      if (m != null) deleteCookie(m);
      i++;
      }
}

function saveroutec()
	{
	for (kk=0;kk<routesToBeDrawn[0].length;kk++)
		document.cookie=('currentRoute[' + kk + ']=' + routesToBeDrawn[0][kk][8]);
	}

function eraseroutec()
	{
   deleteCookie_array('currentRoute');
	routesToBeDrawn[0] = Array();
	}
