hM = new Array()
hM[1]="Muharram"
hM[2]="Safar"
hM[3]="Rabi I"
hM[4]="Rabi II"
hM[5]="Jumada I"
hM[6]="Jumada II"
hM[7]="Rajab"
hM[8]="Sha'ban"
hM[9]="Ramadan"
hM[10]="Shawwal"
hM[11]="Dhu'l Qa'dah"
hM[12]="Dhu'l Hijja"


gM = new Array()
gM[1]="January"
gM[2]="February"
gM[3]="March"
gM[4]="April"
gM[5]="May"
gM[6]="June"
gM[7]="July"
gM[8]="Aug"
gM[9]="September"
gM[10]="October"
gM[11]="November"
gM[12]="December"


function JSHijriDate()	
{
	var today=new Date()
	var todayG = new myDate(today.getDate(), today.getMonth()+1, today.getYear()) 
	var todayH = new GregToIsl(todayG)
	var sToday = todayH.day + " " + hM[todayH.month] + " " + todayH.year
	return sToday;
}


function weekDay(wdn){
	if(wdn==0){ return "Monday" }
	if(wdn==1){ return "Tuesday" }
	if(wdn==2){ return "Wednesday" }
	if(wdn==3){ return "Thursday" }
	if(wdn==4){ return "Friday" }
	if(wdn==5){ return "Saturday" }
	if(wdn==6){ return "Sunday" }
	return ""
}

function myDate(day,month,year,dayname) {
	this.day = day
	this.month = month
	this.year = year
	this.dayname = dayname
}

function AdjGreg(x,inc) {

	var d = x.day
	var m = x.month
	var y = x.year

	d = day + nInc
	if ( d > LastDayG(m,y) ) {
		d = 1
		m = m + 1
		if (m > 12) { m = 1; y = y + 1 }
	}
	if ( d < 1 ) {
		m = m - 1
		if (m < 1) { m = 12; y = y - 1 }
		d = LastDayG(m,y)
	}
	return new myDate(d,m,y)
}

function LastDayG(m,y) {
	if ( (m==4)||(m==6)||(m==9)||(m==11) )
		{ return 30 }
	if ( m != 2 ) 
		{ return 31 }
	// month is 2, check for leap year
	if (  ((y%4)==0) && ((y%400)!=0)  ) { return 29 }
	// else
	return 28
}

function AdjHijri(inc) {

	var d = x.day
	var m = x.month
	var y = x.year

	d = day + nInc
	if ( d > LastDayH(m,y) ) {
		d = 1
		m = m + 1
		if (m > 12) { m = 1; y = y + 1 }
	}
	if ( d < 1 ) {
		m = m - 1
		if (m < 1) { m = 12; y = y - 1 }
		d = LastDayH(m,y)
	}
	return new myDate(d,m,y)
}


function LastDayH(m,y) {

	var tmp

	tmp = new myDate(30,m,y)
	var g1 = IslToGreg(tmp)

	var xm = m*1 + 1
	var xy = y*1
	if (xm*1 > 12) { xm = 1*1; xy = xy*1 + 1 }
	tmp = new myDate(1,xm,xy)
	var g2 = IslToGreg(tmp)

	if (g1.dayname == g2.dayname)  { return 29 }
	return 30
}



//  ######################

function intPart(floatNum){
	if (floatNum< -0.0000001)
	{
		 return Math.ceil(floatNum-0.0000001)
	}
	return Math.floor(floatNum+0.0000001)	
}


function GregToIsl(arg) {

	d=parseInt(arg.day)
	m=parseInt(arg.month)
	y=parseInt(arg.year)

	if ((y>1582)||((y==1582)&&(m>10))||((y==1582)&&(m==10)&&(d>14))) 
	{
		jd=intPart((1461*(y+4800+intPart((m-14)/12)))/4)+intPart((367*(m-2-12*(intPart((m-14)/12))))/12)-
		intPart( (3* (intPart(  (y+4900+    intPart( (m-14)/12)     )/100)    )   ) /4)+d-32075
	}
	else
	{
		jd = 367*y-intPart((7*(y+5001+intPart((m-9)/7)))/4)+intPart((275*m)/9)+d+1729777
	}

	wd=weekDay(jd%7)
	l=jd-1948440+10632
	n=intPart((l-1)/10631)
	l=l-10631*n+354
	j=(intPart((10985-l)/5316))*(intPart((50*l)/17719))+(intPart(l/5670))*(intPart((43*l)/15238))
	l=l-(intPart((30-j)/15))*(intPart((17719*j)/50))-(intPart(j/16))*(intPart((15238*j)/43))+29
	m=intPart((24*l)/709)
	d=l-intPart((709*m)/24)
	y=30*n+j-30

	return new myDate(d,m,y,wd)
}

function IslToGreg(arg) {

	d=parseInt(arg.day)
	m=parseInt(arg.month)
	y=parseInt(arg.year)

	jd=intPart((11*y+3)/30)+354*y+30*m-intPart((m-1)/2)+d+1948440-385
	wd=weekDay(jd%7)

	if (jd> 2299160 )
	{
		l=jd+68569
		n=intPart((4*l)/146097)
		l=l-intPart((146097*n+3)/4)
		i=intPart((4000*(l+1))/1461001)
		l=l-intPart((1461*i)/4)+31
		j=intPart((80*l)/2447)
		d=l-intPart((2447*j)/80)
		l=intPart(j/11)
		m=j+2-12*l
		y=100*(n-49)+i+l
	}	
	else	
	{
		j=jd+1402
		k=intPart((j-1)/1461)
		l=j-1461*k
		n=intPart((l-1)/365)-intPart(l/1461)
		i=l-365*n+30
		j=intPart((80*i)/2447)
		d=i-intPart((2447*j)/80)
		i=intPart(j/11)
		m=j+2-12*i
		y=4*k+n+i-4716
	}

	return new myDate(d,m,y,wd)
}


// #####################################################


function CalcHijri() {
	var d = document.frmgreg.gd.value
	var m = document.frmgreg.gm.value
	var y = document.frmgreg.gy.value
	var xIn = new myDate(d,m,y)
	var xOut = GregToIsl(xIn)
	document.frmhijri.hm.value = xOut.month
	document.frmhijri.hy.value = xOut.year
	document.frmhijri.hd.value = xOut.day
	replaceContent('divDayName',xOut.dayname)
}



function CalcGreg() {
	var d = document.frmhijri.hd.value
	var m = document.frmhijri.hm.value
	var y = document.frmhijri.hy.value
	var xIn = new myDate(d,m,y)
	var xOut = IslToGreg(xIn)
	document.frmgreg.gm.value = xOut.month
	document.frmgreg.gy.value = xOut.year
	document.frmgreg.gd.value = xOut.day
	replaceContent('divDayName',xOut.dayname)
}


function PopDayListG(def) {
	var s = ""
	
	var m = document.frmgreg.gm.value
	var y = document.frmgreg.gy.value
	var LastDay = LastDayG(m,y)
	
	if (def==0) { def = document.frmgreg.gd.value }
	if (def>LastDay) { def = LastDay }
			
	s = s + "<select name=gd id=gd onchange='CalcHijri();'>"

	for (d=1;d<=LastDay;d++) {
		s = s + "<option value=" + d
		if (d == def) { s = s + " selected" }
		s = s + ">" + d + "</option>"		
	}
	s = s + "</select>"
	replaceContent("gDayList",s)
}

function PopDayListH(def) {
	var s = ""
	
	var m = document.frmhijri.hm.value
	var y = document.frmhijri.hy.value
	var LastDay = LastDayH(m,y)

	if (def==0) { def = document.frmhijri.hd.value }
	if (def>LastDay) { def = LastDay }
			
	s = s + "<select name=hd id=hd onchange='CalcGreg();'>"

	for (d=1;d<=LastDay;d++) {
		s = s + "<option value=" + d
		if (d == def) { s = s + " selected" }
		s = s + ">" + d + "</option>"		
	}
	s = s + "</select>"
	replaceContent("hDayList",s)
}

