// Utility functions

function rd2pix (ra, dec)
{
    var det = CD1_1 * CD2_2 - CD1_2 * CD2_1;
    if (det == 0.0) return new Array (0, 0);

    cdinv = new Array (new Array (CD2_2/det, -CD2_1/det),
        new Array (-CD1_2/det, CD1_1/det));

	var toRadian = Math.PI / 180.0;
    ra = toRadian * (ra*15);
    dec = toRadian * (dec);
    var ra0 = toRadian * (CRVAL1);
    var dec0 = toRadian * (CRVAL2);

    var denom = Math.sin (dec) * Math.sin (dec0) +
        Math.cos (dec) * Math.cos (dec0) * Math.cos (ra-ra0);
    var xi = Math.cos (dec) * Math.sin (ra-ra0) / denom;
    var eta = (Math.sin (dec)*Math.cos (dec0) - Math.cos (dec) * Math.sin (dec0) *
        Math.cos (ra-ra0)) /denom;

    xi = xi / toRadian;
    eta = eta / toRadian; 
    var x1 = cdinv[0][0] * xi + cdinv[0][1] * eta + CRPIX1;
    var y1 = cdinv[1][0] * xi + cdinv[1][1] * eta + CRPIX2;

    return new Array (x1, y1);
} // rd2pix


function pix2rd (xin, yin)
{
	var xi, eta;
	var x = xin - CRPIX1;
	var y = yin - CRPIX2;

	xi = CD1_1 * x + CD1_2 * y;
	eta = CD2_1 * x + CD2_2 * y;

	var toRadian = Math.PI / 180.0;
	var ra0 = CRVAL1 * toRadian;
	var dec0 = CRVAL2 * toRadian;
	xi = xi * toRadian;
	eta = eta * toRadian;

	var sinDec0 = Math.sin (dec0);
	var cosDec0 = Math.cos (dec0);
	var cosEtaSin = cosDec0 - eta * sinDec0;
	ra = Math.atan2 (xi, cosEtaSin) + ra0;
	dec = Math.atan2 (eta * cosDec0 + sinDec0,
		Math.sqrt (cosEtaSin * cosEtaSin + xi * xi));
	ra = ra / toRadian / 15.0;
	dec = dec / toRadian;
	
	return new Array (ra, dec);
} // pix2rd

function deg2Sexagecimal (deg)
{
    var dd, mm, ss;
    var sign = ' ';
    if (deg < 0)
    {
        deg = -deg;
        sign = '-';
    }
    dd = Math.floor (deg);
    deg = (deg - dd) * 60.0;
    mm = Math.floor (deg);
    ss = (deg - mm) * 60.0 + 0.000001;

    if (ss >= 60)
    {
        ss -= 60;
        mm += 1;
    }
    if (mm >= 60)
    {
        mm -= 60;
        dd += 1;
    }
    if (dd > 360)
    {
        dd -= 360;
    }

    if (dd < 10) dd = '0' + dd;
    else dd = '' + dd;
    if (mm < 10) mm = '0' + mm;
    else mm = '' + mm;
    if (ss < 10) ss = '0' + ss;

    ss = ss + '000000000';
    mm = mm.substr (0, 2);
    ss = ss.substr (0, 5);
    return sign + dd + ':' + mm + ':' + ss;
} // deg2Sexagecimal


