/* 
---------------------------------------------------------

QiblaLocator v0.8.10

Original code 
By: ibnMasud

Code cleanup and bug-fix
By: Hamid Zarrabi-Zadeh
Fixes a critical bug in showing qibla direction line

Modified to use here by: hex786

--------------------------- Globals -----------------------------
*/

var qiblaLat = 21.422609;
var qiblaLng = 39.826168; 

//Const normal = G_NORMAL_MAP;
//Const hybrid = G_HYBRID_MAP;
//Const satellite = G_SATELLITE_MAP;
//Const physical = G_PHYSICAL_MAP;

var addrEmptyMsg = 'Enter address, zipcode, country or lat,lon';
var map, geocoder, centerMarker;




// create a direction line
function getLine(lat, lng, angle,zoom)
{
	var factor = 8;

	var dLng = factor/ Math.pow(2, zoom- 7);
	if (zoom < 7) dLng = factor;

	dLng = dLng* Math.sin(dtr(angle));

	var lat2 = getLat(lat, angle, dLng)

	var line = lat2;
	return line;
}
// create a direction lng
function getLng(lng, angle,lat, zoom)
{
	var factor = 8;

	var dLng = factor/ Math.pow(2, zoom- 7);
	if (zoom < 7) dLng = factor;

	dLng = dLng* Math.sin(dtr(angle));

	var line = lng+dLng;
	return line;
}

//-------------------------- Calculating Functions -----------------------

// definitions:
// point1 = (lat1, lng1), point2 = (lat2, lng2)
// dLng = lng1- lng2
// direction = angle of the line connecting point1 to point2 (CW from North)


// find the direction
function getDirection(lat1, lng1, lat2, lng2) 
{
	var dLng = lng1- lng2;
	return rtd(getDirectionRad(dtr(lat1), dtr(lat2), dtr(dLng)));

}

function getDirectionRad(lat1, lat2, dLng) 
{
	return Math.atan2(Math.sin(dLng), Math.cos(lat1)* Math.tan(lat2)- Math.sin(lat1)* Math.cos(dLng));
}


// find lat2 for a given direction
function getLat(lat1, angle, dLng) 
{
	return rtd(getLatRad(dtr(lat1), dtr(angle), dtr(dLng)));
}

function getLatRad(lat1, angle, dLng) 
{
	return Math.atan((Math.sin(dLng)+ Math.tan(angle)* Math.sin(lat1)* Math.cos(dLng))/ (Math.tan(angle)* Math.cos(lat1)));
}


//-------------------------- Angle Unit Conversion -----------------------


// degree to radian
function dtr(d)
{
    return (d* Math.PI)/ 180.0;
}

// radian to degree
function rtd(r)
{
    return (r* 180.0)/ Math.PI;
}


