var dDate = new Array(100);
var sSigne = new Array("A","B","C","D","E","F","G","H","I","J","K","L");
var sAsc = new Array("Metal","Water","Wood","Fire","Earth");

var sDisplayHoro="false"

/*1900*/
var i=0;
dDate[i]=new Date(1900+i,0,31);
i=i+1;
dDate[i]=new Date(1900+i,1,19);
i=i+1;
dDate[i]=new Date(1900+i,1,8);
i=i+1;
dDate[i]=new Date(1900+i,0,29);
i=i+1;
dDate[i]=new Date(1900+i,1,16);
i=i+1;
dDate[i]=new Date(1900+i,1,4);
i=i+1;
dDate[i]=new Date(1900+i,0,25);
i=i+1;
dDate[i]=new Date(1900+i,1,13);
i=i+1;
dDate[i]=new Date(1900+i,1,2);
i=i+1;
dDate[i]=new Date(1900+i,0,22);
i=i+1;
dDate[i]=new Date(1900+i,1,10);
i=i+1;
dDate[i]=new Date(1900+i,0,30);
i=i+1;

/*1912*/
dDate[i]=new Date(1900+i,1,18);
i=i+1;
dDate[i]=new Date(1900+i,1,6);
i=i+1;
dDate[i]=new Date(1900+i,0,26);
i=i+1;
dDate[i]=new Date(1900+i,1,14);
i=i+1;
dDate[i]=new Date(1900+i,1,3);
i=i+1;
dDate[i]=new Date(1900+i,0,23);
i=i+1;
dDate[i]=new Date(1900+i,1,11);
i=i+1;
dDate[i]=new Date(1900+i,1,1);
i=i+1;
dDate[i]=new Date(1900+i,1,20);
i=i+1;
dDate[i]=new Date(1900+i,1,8);
i=i+1;
dDate[i]=new Date(1900+i,0,28);
i=i+1;
dDate[i]=new Date(1900+i,1,16);
i=i+1;
/*1924*/
dDate[i]=new Date(1900+i,1,5);
i=i+1;
dDate[i]=new Date(1900+i,0,25);
i=i+1;
dDate[i]=new Date(1900+i,1,13);
i=i+1;
dDate[i]=new Date(1900+i,1,2);
i=i+1;
dDate[i]=new Date(1900+i,0,23);
i=i+1;
dDate[i]=new Date(1900+i,1,10);
i=i+1;
dDate[i]=new Date(1900+i,0,30);
i=i+1;
dDate[i]=new Date(1900+i,1,17);
i=i+1;
dDate[i]=new Date(1900+i,1,6);
i=i+1;
dDate[i]=new Date(1900+i,0,26);
i=i+1;
dDate[i]=new Date(1900+i,1,14);
i=i+1;
dDate[i]=new Date(1900+i,1,4);
i=i+1;

/*1936*/
dDate[i]=new Date(1900+i,0,24);
i=i+1;
dDate[i]=new Date(1900+i,1,11);
i=i+1;
dDate[i]=new Date(1900+i,0,31);
i=i+1;
dDate[i]=new Date(1900+i,1,19);
i=i+1;
dDate[i]=new Date(1900+i,1,8);
i=i+1;
dDate[i]=new Date(1900+i,0,27);
i=i+1;
dDate[i]=new Date(1900+i,1,15);
i=i+1;
dDate[i]=new Date(1900+i,1,5);
i=i+1;
dDate[i]=new Date(1900+i,0,25);
i=i+1;
dDate[i]=new Date(1900+i,1,13);
i=i+1;
dDate[i]=new Date(1900+i,1,2);
i=i+1;
dDate[i]=new Date(1900+i,0,22);
i=i+1;

/*1948*/
dDate[i]=new Date(1900+i,1,10);
i=i+1;
dDate[i]=new Date(1900+i,0,29);
i=i+1;
dDate[i]=new Date(1900+i,1,17);
i=i+1;
dDate[i]=new Date(1900+i,1,6);
i=i+1;
dDate[i]=new Date(1900+i,0,27);
i=i+1;
dDate[i]=new Date(1900+i,1,14);
i=i+1;
dDate[i]=new Date(1900+i,1,3);
i=i+1;
dDate[i]=new Date(1900+i,0,24);
i=i+1;
dDate[i]=new Date(1900+i,1,12);
i=i+1;
dDate[i]=new Date(1900+i,0,31);
i=i+1;
dDate[i]=new Date(1900+i,1,18);
i=i+1;
dDate[i]=new Date(1900+i,1,8);
i=i+1;

/*1960*/
dDate[i]=new Date(1900+i,0,28);
i=i+1;
dDate[i]=new Date(1900+i,1,15);
i=i+1;
dDate[i]=new Date(1900+i,1,5);
i=i+1;
dDate[i]=new Date(1900+i,0,25);
i=i+1;
dDate[i]=new Date(1900+i,1,13);
i=i+1;
dDate[i]=new Date(1900+i,1,2);
i=i+1;
dDate[i]=new Date(1900+i,0,21);
i=i+1;
dDate[i]=new Date(1900+i,1,9);
i=i+1;
dDate[i]=new Date(1900+i,0,30);
i=i+1;
dDate[i]=new Date(1900+i,1,17);
i=i+1;
dDate[i]=new Date(1900+i,1,6);
i=i+1;
dDate[i]=new Date(1900+i,0,27);
i=i+1;

/*1972*/
dDate[i]=new Date(1900+i,1,15);
i=i+1;
dDate[i]=new Date(1900+i,1,3);
i=i+1;
dDate[i]=new Date(1900+i,0,23);
i=i+1;
dDate[i]=new Date(1900+i,1,11);
i=i+1;
dDate[i]=new Date(1900+i,0,31);
i=i+1;
dDate[i]=new Date(1900+i,1,18);
i=i+1;
dDate[i]=new Date(1900+i,1,7);
i=i+1;
dDate[i]=new Date(1900+i,0,28);
i=i+1;
dDate[i]=new Date(1900+i,1,16);
i=i+1;
dDate[i]=new Date(1900+i,1,5);
i=i+1;
dDate[i]=new Date(1900+i,0,25);
i=i+1;
dDate[i]=new Date(1900+i,1,13);
i=i+1;

/*1984*/
dDate[i]=new Date(1900+i,1,2);
i=i+1;
dDate[i]=new Date(1900+i,1,20);
i=i+1;
dDate[i]=new Date(1900+i,1,9);
i=i+1;
dDate[i]=new Date(1900+i,0,29);
i=i+1;
dDate[i]=new Date(1900+i,1,17);
i=i+1;
dDate[i]=new Date(1900+i,1,6);
i=i+1;
dDate[i]=new Date(1900+i,0,27);
i=i+1;
dDate[i]=new Date(1900+i,1,15);
i=i+1;
dDate[i]=new Date(1900+i,1,4);
i=i+1;
dDate[i]=new Date(1900+i,0,23);
i=i+1;
dDate[i]=new Date(1900+i,1,10);
i=i+1;
dDate[i]=new Date(1900+i,0,31);
i=i+1;

/*1996*/
dDate[i]=new Date(1900+i,1,19);
i=i+1;
dDate[i]=new Date(1900+i,1,7);
i=i+1;
dDate[i]=new Date(1900+i,0,28);
i=i+1;
dDate[i]=new Date(1900+i,1,16);
i=i+1;



function CheckDate(form){

	var mm = parseInt(stripZeros(form.Bmth.value)) - 1;
	var dd = parseInt(stripZeros(form.Bday.value));
	var yy = parseInt(stripZeros(form.Byear.value));
	var dTemp=new Date(yy,mm,dd);
	var sSigne= GetChinese(dTemp);
	form.astrochin.value=GetChinese(dTemp);
	form.astrochinasc.value=GetChineseAsc(dTemp);


}

function GetChineseId(dDateNaissance){
	var yy=dDateNaissance.getYear();
	var nSigne=yy%12;
	if (dDateNaissance<dDate[yy]){
		if (nSigne==0){
			nSigne=11;
		}
		else{
			nSigne=nSigne-1;
		}
	}
	return nSigne;
}

function GetChinese(dDateNaissance){
	return sSigne[GetChineseId(dDateNaissance)];
}
function GetChineseAscId(dDateNaissance){
	var yy=dDateNaissance.getYear();
	var nSigne=yy%10;
	nSigne=Math.floor(nSigne/2);	

	if (dDateNaissance<dDate[yy]){
		if ((yy%10)==0){
			nSigne=4;
		}
		else{
			nSigne=Math.floor((yy%10-1)/2);
		}
	}
	return nSigne;
}

function GetChineseAsc(dDateNaissance){
	return sAsc[GetChineseAscId(dDateNaissance)];
}
function AddZeros( nNum ){
	sNum=nNum;
	if (nNum <10) sNum="0"+nNum;
	return sNum;
}

function stripZeros(inputStr) {
var result = inputStr
while (result.substring(0,1) == "0") {
result = result.substring(1,result.length)
}
return result
}

// general purpose function to see if an input value has been entered at all
function isEmpty(inputStr) {
if (inputStr == "" || inputStr == null) {
return true
}
return false
}

// general purpose function to see if a suspected numeric input 
// is a positive integer
function isNumber(inputStr) {
for (var i = 0; i < inputStr.length; i++) {
var oneChar = inputStr.substring(i, i + 1)
if (oneChar < "0" || oneChar > "9") {
return false
}
}
return true
}

// function to determine if value is in acceptable range for this application
function inRange(inputStr, lo, hi) {
var num = parseInt(inputStr)
if (num < lo || num > hi) {
return false
}
return true
}

var now=new Date();
var dates= now.getDate();
var months= (now.getMonth()+1);
var years= (now.getYear()-1900-18);


// these routines are copyright Kai Nicolai Priddy 1998
// please don't copy or use this code without permission...
// Basic calculation algorithms taken from:
// Michael Erlewine - Computer programming for Astrologers

var datacounter=0

errmess=new Array("","Date out of range error: Only dates between 1900 and 2300 accepted.")

planet = new Array(1)
planet[0] = new Array (4)


PlanetData = new Array(48)

// Sun data
PlanetData [1] = 358.4758
PlanetData [2] = 35999.0498
PlanetData [3] = -.0002
PlanetData [4] = .01675
PlanetData [5] = -.4E-4
PlanetData [6] = 0
PlanetData [7] = 1
PlanetData [8] = 101.2208
PlanetData [9] = 1.7192
PlanetData [10] = .00045
PlanetData [11] = 0
PlanetData [12] = 0
PlanetData [13] = 0
PlanetData [14] = 0
PlanetData [15] = 0
PlanetData [16] = 0
// Venus data
PlanetData [17] = 212.6032
PlanetData [18] = 58517.8039
PlanetData [19] = .0013
PlanetData [20] = .00682
PlanetData [21] = -.5E-4
PlanetData [22] = 0
PlanetData [23] = .7233
PlanetData [24] = 54.3842
PlanetData [25] = .5082
PlanetData [26] = -.14E-2
PlanetData [27] = 75.7796
PlanetData [28] = .8999
PlanetData [29] = .4E-3
PlanetData [30] = 3.3936
PlanetData [31] = .1E-2
PlanetData [32] = 0
// Mars data
PlanetData [33] = 319.5294
PlanetData [34] = 19139.8585
PlanetData [35] = .2E-3
PlanetData [36] = .09331
PlanetData [37] = .9E-4
PlanetData [38] = 0
PlanetData [39] = 1.5237
PlanetData [40] = 285.4318
PlanetData [41] = 1.0698
PlanetData [42] = .1E-3
PlanetData [43] = 48.7864
PlanetData [44] = .77099
PlanetData [45] = 0
PlanetData [46] = 1.8503
PlanetData [47] = -.7E-3
PlanetData [48] = 0


signs = new Array(12)

signs[1] ="A"
signs[2] = "B"
signs[3] = "C"
signs[4] = "D"
signs[5] = "E"
signs[6] = "F"
signs[7] = "G"
signs[8] = "H"
signs[9] = "I"
signs[10] = "J"
signs[11] = "K"
signs[12] = "L"

planetname = new Array(4)

planetname[1] = "Sun "
planetname[2] = "Moon "
planetname[3] = "Venus "
planetname[4] = "Mars "



function makechart () {
var check=eval(document.forms[0].Byear.value)
if (isNaN(check)) {check=0}
if (check < 1900 || check > 2300) {
	retval=1
	}
else {
retval=0

d1=julian_day(eval(document.forms[0].Bday.value),eval(document.forms[0].Bmth.options[document.forms[0].Bmth.selectedIndex].value),eval(document.forms[0].Byear.value))



var t1=FNcentury(d1)
junk=planets_aa1(t1,0)
planet[0][2]=ex_moon(t1)



}
return retval
}

function julian_day (day, month, year) {
   var im=(12*(year+4800))+(month-3)
   var j=wholediv((2*(im-(wholediv(im,12))*12)+7+365*im),12)
   j=parseInt(j)+day+parseInt(wholediv(im,48))-32083
   if (j>2299171)
        j=j+parseInt(wholediv(im,4800))-parseInt(wholediv(im,1200))+38
return j
}

function wholediv(a,b) {
var result=a%b
a=a-result
result=a/b
return result
}

function ex_moon(t) {
var t2=t*t
var da=t*36525
var ln=FNmod(259.1833-0.05295392*da+(0.000002*t+0.002078)*t2)
var ms=FNmod(279.69668+36000.7689*t+0.0003025*t2)
var de=FNmod(350.737486+445267.114*t-0.001436*t2)
var lp=FNmod(334.32956+0.11140408*da+(-0.000012*t+0.010325)*t2)
var ma=FNmod(358.47584+35999.04975*t-0.00015*t2)
var ml=FNmod(270.434164+13.1763965*da+(0.0000019*t-0.001133)*t2)
var nu=(-(17.2327+0.01737*t)*FNsin(ln)-1.273*FNsin(2*ms))/3600
var el=FNmod(296.1046083+477198.849*t+0.00919167*t*t)
// Exact moon calculation starts here
el=ma
var ll=ml-lp
var ff=ml-ln
//Long term lunar perturbations coefficients
var w=FNsin(51.2+20.2*t)
var x=FNsin(193.4404-132.87*t-0.0091731*t2)*14.27
var y=FNsin(ln)
var z=-15.58*FNsin(ln+275.05-2.3*t)
//Correction to elements
ml=(0.84*w+x+7.261*y)/3600+ml
ll=(2.94*w+x+9.337*y)/3600+ll
de=(7.24*w+x+7.261*y)/3600+de
el=-6.40*w/3600+el
ff=(0.21*w+x-88.699*y-15.58*z)/3600+ff
//Short term lunar perturbations
l=22639.55*FNsin(ll)-4586.47*FNsin(ll-2*de)+2369.912*FNsin(2*de)
l=l+769.02*FNsin(2*ll)-668.15*FNsin(el)
l=l-411.61*FNsin(2*ff)-211.66*FNsin(2*ll-2*de)-205.96*FNsin(ll+el-2*de)
l=l+191.95*FNsin(ll+2*de)-165.15*FNsin(el-2*de)
l=l+147.69*FNsin(ll-el)-125.15*FNsin(de)-109.67*FNsin(ll+el)
l=l-55.17*FNsin(2*ff-2*de)-45.099*FNsin(ll+2*ff)
l=l+39.53*FNsin(ll-2*ff)-38.43*FNsin(ll-4*de)+36.12*FNsin(3*ll)
l=l-30.77*FNsin(2*ll-4*de)+28.48*FNsin(ll-el-2*de)
l=l-24.42*FNsin(el+2*de)
l=l+18.61*FNsin(ll-de)+18.02*FNsin(el+de)+14.58*FNsin(ll-el+2*de)
l=l+14.39*FNsin(2*ll+2*de)+13.9*FNsin(4*de)-13.19*FNsin(3*ll-2*de)
l=l+9.7*FNsin(2*ll-el)+9.37*FNsin(ll-2*ff-2*de)-8.63*FNsin(2*ll+el-2*de)
l=l-8.47*FNsin(ll+de)-8.096*FNsin(2*el-2*de)-7.65*FNsin(2*ll+el)
l=l-7.49*FNsin(2*el)-7.41*FNsin(ll+2*el-2*de)-6.38*FNsin(ll-2*ff+2*de)
l=l-5.74*FNsin(2*ff+2*de)-4.39*FNsin(ll+el-4*de)-3.99*FNsin(2*ll+2*ff)
l=l+3.22*FNsin(ll-3*de)-2.92*FNsin(ll+el+2*de)-2.74*FNsin(2*ll+el-4*de)
l=l-2.49*FNsin(2*ll-el-2*de)+2.58*FNsin(ll-2*el)+2.53*FNsin(ll-2*el-2*de)
l=l-2.15*FNsin(el+2*ff-2*de)+1.98*FNsin(ll+4*de)+1.94*FNsin(4*ll)
l=l-1.88*FNsin(el-4*de)+1.75*FNsin(2*ll-de)-1.44*FNsin(el-2*ff+2*de)
l=l-1.298*FNsin(2*ll-2*ff)-1.27*FNsin(ll+el+de)+1.23*FNsin(2*ll-3*de)
l=l-1.19*FNsin(3*ll-4*de)+1.18*FNsin(2*ll-el+2*de)-1.17*FNsin(ll+2*el)
l=l-1.09*FNsin(ll-el-de)+1.06*FNsin(3*ll+2*de)-0.59*FNsin(2*ll+de)
l=l-0.99*FNsin(ll+2*ff+2*de)-0.95*FNsin(4*ll-2*de)-0.57*FNsin(2*ll-6*de)
l=l+0.64*FNsin(ll-4*de)+0.56*FNsin(el-de)+0.76*FNsin(ll-2*el+2*de)
l=l+0.58*FNsin(2*ff-de)-0.55*FNsin(3*ll+el)+0.68*FNsin(3*ll-el)
l=(l+0.557*FNsin(2*ll+2*ff-2*de)+0.538*FNsin(2*ll-2*ff-2*de))/3600
return ml+l+nu
}

function planets_aa1(ct,sbj) {
var i=0;dummy=0;var g=0;var xa=0;var ya=0;var za=0;var x1=0;var y1=0
var z1=0;var m=0;var e=0;var ea=0;var au=0;var e1=0;var xw=0;var yw=0
var zw=0;var ap=0;var an=0;var i_n=0;var x=0;var y=0;var r=0;var a=0
datacounter=0

for (i=1; i < 11; i++) {
	if (i==2) {i++}
	m=FNrad(FNmod(FNdeg(FNterms(ct))))
	e=FNdeg(FNterms(ct))
	ea=m
	for (a=1; a < 5; a++) {ea=m+e*Math.sin(ea)}
	au=ReadData()
	e1=0.01720209/(Math.pow(au,1.5)*(1-e*Math.cos(ea)))
	xw=-(au*e1)*Math.sin(ea)
	yw=(au*e1)*Math.pow(Math.abs(1-e*e),0.5)*Math.cos(ea)
	ap=FNterms(ct)
	an=FNterms(ct)
	i_n=FNterms(ct)
	x=xw
	y=yw
//rotate
	if (y==0) {y=1.7E-05};a=polara(x,y);r=polarr(x,y);a+=ap
	if (a==0) {a=1.7E-05};x=r*Math.cos(a);y=r*Math.sin(a);d=x;x=y;y=0
	if (y==0) {y=1.7E-05};a=polara(x,y);r=polarr(x,y);a+=i_n
	if (a==0) {a=1.7E-05};x=r*Math.cos(a);y=r*Math.sin(a);g=y;y=x;x=d
	if (y==0) {y=1.7E-05};a=polara(x,y);r=polarr(x,y);a+=an
	if (a<0) {a+=(2*Math.PI)}
	if (a==0) {a=1.7E-05};x=r*Math.cos(a);y=r*Math.sin(a)

	xh=x;yh=y;zh=g
	if (i==1)
		{xa=-xh;ya=-yh;za=-zh;ab=0}
	else
		{xw=xh+xa;yw=yh+ya;zw=zh+za}
	x=au*(Math.cos(ea)-e)
	y=au*Math.sin(ea)*Math.pow(Math.abs(1-e*e),0.5)
//rotate
	if (y==0) {y=1.7E-05};a=polara(x,y);r=polarr(x,y);a+=ap
	if (a==0) {a=1.7E-05};x=r*Math.cos(a);y=r*Math.sin(a);d=x;x=y;y=0
	if (y==0) {y=1.7E-05};a=polara(x,y);r=polarr(x,y);a+=i_n
	if (a==0) {a=1.7E-05};x=r*Math.cos(a);y=r*Math.sin(a);g=y;y=x;x=d
	if (y==0) {y=1.7E-05};a=polara(x,y);r=polarr(x,y);a+=an
	if (a<0) {a+=(2*Math.PI)}
	if (a==0) {a=1.7E-05};x=r*Math.cos(a);y=r*Math.sin(a)

	xx=x;yy=y;zz=g
	xk=(xx*yh-yy*xh)/(xx*xx+yy*yy)
	br=0
	a2=a;r2=r;x2=xx;y2=yy;z2=zz

//spherical i,xx,yy,zz,a,r,br,ab,ss,p,c 
	if (y2==0) {y2=1.7E-05};a2=polara(x2,y2);r2=polarr(x2,y2)
	c=FNdeg(a2)+br
	if (i==1 && ab==1) {c=FNmod(c+180)}
	c=FNmod(c)
	ss=c;y2=z2;x2=r
	if (y2==0) {y2=1.7E-05};a2=polara(x2,y2);r2=polarr(x2,y2)
	if (a2>0.35) {a2=a2+2*Math.PI}
	p=FNdeg(a2)

	ab=1
	if (i==1){
			x1=xx;y1=yy;z1=zz;
			}
	else{
		xx-=x1;yy-=y1;zz-=z1;xk=(xx*yw-yy*xw)/(xx*xx+yy*yy)
		}
	br=0.0057683*Math.sqrt(xx*xx+yy*yy+zz*zz)*FNdeg(xk)
	a2=a;r2=r;x2=xx;y2=yy;z2=zz

//spherical i,xx,yy,zz,a,r,br,ab,ss,p,c 
	if (y2==0) {y2=1.7E-05};a2=polara(x2,y2);r2=polarr(x2,y2)
	c=FNdeg(a2)+br
	if (i==1 && ab==1) {c=FNmod(c+180)}
	c=FNmod(c)
	planet[sbj][i]=c
	}
return c
}

function polara(x,y){
a=Math.atan(y/x)
if (a<0) {a=a+Math.PI}
if (y<0) {a=a+Math.PI}
return a
}

function polarr(x,y){return Math.sqrt(x*x+y*y)}

function FNterms(ct){
s=ReadData()
s1=ReadData()
s2=ReadData()
return FNrad(s+s1*ct+s2*ct*ct)
}

function ReadData(){datacounter ++;return PlanetData[datacounter]}

function FNcentury (jd) {return ((jd-2415020))/36525}
function FNrad(a) {return Math.PI/180*a}
function FNdeg(a) {return 180/Math.PI*a}
function FNsin(a) {return Math.sin(Math.PI/180*a)}
function FNcos(a) {return Math.cos(Math.PI/180*a)}

function FNmod(a) {if (a>360) {return a-(parseInt(a/360)*360)}
			  else { return a }}

function FNzodiac(l) {
if (l<30) {c=1} else {c=(l-(l%30))/30+1}
if (c == 0 || c == 13) {c=1}
return signs[c]
}

function write_data(){

document.forms[0].sol.value=FNzodiac(planet[0][1]);
document.forms[0].moon.value=FNzodiac(planet[0][2]);
document.forms[0].venus.value=FNzodiac(planet[0][3]);
document.forms[0].mars.value=FNzodiac(planet[0][4]);

}