var suncalc_mapSize = 620;
var suncalc_pointerSize = 2;
var suncalc_pointerSizeL = 6;
var suncalc_pointerState;

function suncalc_init(lat,lon,rel) {
	document.write('<div onclick="suncalc_pointimg(event,this)" onmousemove="suncalc_pointimgcrdinfo(event,this)" id="map" style="height:'+(suncalc_mapSize/2)+'px;width:'+suncalc_mapSize+'px; background: transparent url('+rel+'_pub/images/world_blank_620x310.png) top left no-repeat; cursor: pointer;position:relative;overflow:hidden;"><div id="maploc" style="overflow:hidden;visibility:hidden;float:left;height:'+suncalc_pointerSizeL+'px;width:'+suncalc_pointerSizeL+'px;border: 1px solid #FF9;position:absolute;"></div><div id="mappointer" style="overflow:hidden;visibility:hidden;float:left;height:'+suncalc_pointerSize+'px;width:'+suncalc_pointerSize+'px;border: 1px solid #FF9;position:absolute;"></div><br style="clear:both;"/></div><span id="suncalcmi"></span><br/><br/><input class="buttonsmall" type="button" onclick="mapBlank(\''+rel+'\');" value="Blank"/> <input class="buttonsmall" type="button" onclick="mapDay(\''+rel+'\');" value="Day"/> <input class="buttonsmall" type="button" onclick="mapNight(\''+rel+'\');" value="Night"/> <input class="buttonsmall" type="button" onclick="mapTopo(\''+rel+'\');" value="Topo"/><br/>');
	mapBlank(rel);
}
function mapDay(rel) {
	document.getElementById('map').style.backgroundImage = 'url('+rel+'_pub/images/world_620x310.jpg)';
	document.getElementById('maploc').style.borderColor='#FF9C7F';
	document.getElementById('mappointer').style.borderColor='#FF9C7F';
}
function mapNight(rel) {
	document.getElementById('map').style.backgroundImage = 'url('+rel+'_pub/images/world_by_night_620x310.jpg)';
	document.getElementById('maploc').style.borderColor='#E2FF7F';
	document.getElementById('mappointer').style.borderColor='#E2FF7F';
}
function mapTopo(rel) {
	document.getElementById('map').style.backgroundImage = 'url('+rel+'_pub/images/world_topo_620x310.jpg)';
	document.getElementById('maploc').style.borderColor='#FFFFFF';
	document.getElementById('mappointer').style.borderColor='#FFFFFF';
}
function mapBlank(rel) {
	document.getElementById('map').style.backgroundImage = 'url('+rel+'_pub/images/world_blank_620x310.png)';
	document.getElementById('maploc').style.borderColor='#000000';
	document.getElementById('mappointer').style.borderColor='#000000';
}

function suncalc_pointat(lat,lon,elm) {
	if(!alx()) return false; 
	var top = lat+90;
	document.getElementById(elm).style.visibility ="visible";
	var height = document.getElementById(elm).offsetHeight+2;
	top=(1-(top/180))*(suncalc_mapSize/2)-(height/2);
	document.getElementById(elm).style.marginTop = top+"px";
	
	var left = 0.5*Math.log((1+Math.sin(lat))/(1-Math.sin(lat)));
	left = (lon/180*(suncalc_mapSize/2))+left*lon/180;
	left +=(suncalc_mapSize/2)-height/2;
	document.getElementById(elm).style.marginLeft = left+"px";

//	document.getElementById('map').innerHTML += document.write(left+ ' ' +top+'<br/>');
//	alert(lat+ ' ' +lon)
}
function ssc(lat,lon,obj) {
	document.getElementById('mappointer').title = obj.innerHTML;
	suncalc_pointat(lat,lon,'mappointer');
//	document.getElementById('map').innerHTML += obj.href+"<br/>";
}

function suncalc_pointimg(e,obj){
	if(!alx()) return false; 
	pos_x = e.layerX? e.layerX : e.offsetX? e.offsetX : 0;
	pos_y = e.layerY? e.layerY : e.offsetY? e.offsetY : 0;

	pos_y= (((pos_y/(suncalc_mapSize/2))-.5)*-1)*180;
	pos_x = ((pos_x/suncalc_mapSize)-.5)*360;

	suncalc_pointat(pos_y,pos_x,'mappointer');

	if (pos_y < -82 || pos_y > 82) return false;
	else if (pos_y > -90 && pos_y < 90 && pos_x > -180 && pos_x < 180) {
		drx_overlay("Loading location ...");
		setTimeout("location.href = '"+makeposurl(pos_y,pos_x)+"';",500);
	}

}
function suncalc_pointimgcrdinfo(e,obj){
	lon = e.layerX? e.layerX : e.offsetX? e.offsetX : 0;
	lat = e.layerY? e.layerY : e.offsetY? e.offsetY : 0;

	lat= (((lat/(suncalc_mapSize/2))-.5)*-1)*180;
	lon = ((lon/suncalc_mapSize)-.5)*360;


	if (lat < -82 || lat > 82) document.getElementById('map').style.cursor = "default";
	else document.getElementById('map').style.cursor = "pointer";


	if (lat > 0) lat = "N "+str_pad(number_format(lat,0),2, "0", 'STR_PAD_LEFT');
	else if (lat < 0) lat = "S "+str_pad(number_format(lat*-1,0),2, "0", 'STR_PAD_LEFT');

	if (lon > 0) lon = "E "+str_pad(number_format(lon,0),3, "0", 'STR_PAD_LEFT');
	else if (lon < 0) lon = "W "+str_pad(number_format(lon*-1,0),3, "0", 'STR_PAD_LEFT');


	document.getElementById('suncalcmi').innerHTML = "<b>Latitude:</b> "+lat+"&deg;, <b>Longitude:</b> "+lon+"&deg;";
}

function makeposurl(lat,lon) {
	lat = Math.round(lat,0);
	lon = Math.round(lon,0);

	if (lat >= 0) lat = "N"+str_pad(number_format(lat,6),9, "0", 'STR_PAD_LEFT');
	else if (lat < 0) lat = "S"+str_pad(number_format(lat*-1,6),9, "0", 'STR_PAD_LEFT');

	if (lon >= 0) lon = "E"+str_pad(number_format(lon,6),10, "0", 'STR_PAD_LEFT');
	else if (lon < 0) lon = "W"+str_pad(number_format(lon*-1,6),10, "0", 'STR_PAD_LEFT');

	url = base()+"suncalc/"+lat+"-"+lon+"/";
	return url;
}


function str_pad (input, pad_length, pad_string, pad_type) {
 
    var half = '', pad_to_go;
 
    var str_pad_repeater = function (s, len) {
        var collect = '', i;
 
        while (collect.length < len) {collect += s;}
        collect = collect.substr(0,len);
 
        return collect;
    };
 
    input += '';
    pad_string = pad_string !== undefined ? pad_string : ' ';
    
    if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') { pad_type = 'STR_PAD_RIGHT'; }
    if ((pad_to_go = pad_length - input.length) > 0) {
        if (pad_type == 'STR_PAD_LEFT') { input = str_pad_repeater(pad_string, pad_to_go) + input; }
        else if (pad_type == 'STR_PAD_RIGHT') { input = input + str_pad_repeater(pad_string, pad_to_go); }
        else if (pad_type == 'STR_PAD_BOTH') {
            half = str_pad_repeater(pad_string, Math.ceil(pad_to_go/2));
            input = half + input + half;
            input = input.substr(0, pad_length);
        }
    }
 
    return input;
}

function number_format (number, decimals, dec_point, thousands_sep) {

    var n = number, prec = decimals;
 
    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };
 
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
 
    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}


