﻿function ConvertToUnicode(s)
{
	return s.replace(/0/g, '\u06F0').replace(/1/g, '\u06F1').replace(/2/g, '\u06F2').replace(/3/g, '\u06F3').replace(/4/g, '\u06F4').replace(/5/g, '\u06F5').replace(/6/g, '\u06F6').replace(/7/g, '\u06F7').replace(/8/g, '\u06F8').replace(/9/g, '\u06F9');
}
function SetTitle(d)
{
	var month = document.getElementById("month");
	var city  = document.getElementById("cities")
	document.getElementById("tdTitle").innerHTML = "اوقات شرعی " + ConvertToUnicode(d + " " + month.options[month.selectedIndex].text + " " + document.getElementById("spanYear").innerHTML) + " (به افق " + city.options[city.selectedIndex].text + ")";
}

function Calculate()
{
	var i = document.getElementById("cities").selectedIndex;
	if(i==0)
	{
		alert('لطفا شهری را انتخاب کنید');
		return;
	}

	var m=document.getElementById("month").selectedIndex+1;
	var d=eval(document.getElementById("day").value);
	var lg=eval(document.getElementById("longitude").value);
	var lat=eval(document.getElementById("latitude").value);
	
	main(m, d, lg, lat);
	
	SetTitle(d);
}

function GetAzanMorning(m, d, lg, lat)
{
//	var lg=52.5125;
//	var lat=29.635;
	var ep=sun(m,d,4,lg);
	var zr=ep[0];
	delta=ep[1];
	ha=loc2hor(108.0,delta,lat);
	var t1=Round(zr-ha,24);
	ep=sun(m,d,t1,lg);
	zr=ep[0];
	delta=ep[1];
	ha=loc2hor(108.0,delta,lat);
	var t1=Round(zr-ha,24);

	return hms(t1, m);
}

function GetSunrise(m, d, lg, lat)
{
//
//   t2= Sun rise
//
	var ep=sun(m,d,6,lg);
	var zr=ep[0];
	delta=ep[1];
	ha=loc2hor(90.833,delta,lat);
	var t2=Round(zr-ha,24);
	ep=sun(m,d,t2,lg);
	zr=ep[0];
	delta=ep[1];
	ha=loc2hor(90.833,delta,lat);
	t2=Round(zr-ha,24);
	
	return hms(t2, m);
}

function GetAzanNoon(m, d, lg, lat)
{
//	
//	zr=Zohr
//
	var ep=sun(m,d,12,lg)
	ep=sun(m,d,ep[0],lg)
	var zr=ep[0];
	
	return hms(zr, m);
}

function GetSunset(m, d, lg, lat)
{
//
//   t2= Sun set
//
	var ep=sun(m,d,18,lg)
	var zr=ep[0];
	delta=ep[1];
	ha=loc2hor(90.833,delta,lat)
	var t3=Round(zr+ha,24)
	ep=sun(m,d,t3,lg)
	zr=ep[0];
	delta=ep[1];
	ha=loc2hor(90.833,delta,lat)
	t3=Round(zr+ha,24)
	
	return hms(t3, m);
}

function GetAzanNight(m, d, lg, lat)
{
//
//   t2= Maghreb
//
	var ep=sun(m,d,18.5,lg)
	var zr=ep[0];
	delta=ep[1];
	ha=loc2hor(94.3,delta,lat)
	var t4=Round(zr+ha,24)
	ep=sun(m,d,t4,lg)
	zr=ep[0];
	delta=ep[1];
	ha=loc2hor(94.3,delta,lat)
	t4=Round(zr+ha,24)
	
	return hms(t4, m);
}

function ShowInfo(m, d, lg, lat, morning, sunrise, noon, sunset, night)
{
	var t1 = GetAzanMorning(m, d, lg, lat);
	MM_findObj(morning).innerHTML=ConvertToUnicode(t1);
	temp = MM_findObj("spanMorning");
	if (temp) temp.innerHTML = t1.substring(0,5);
	
	var t2 = GetSunrise(m, d, lg, lat);
	MM_findObj(sunrise).innerHTML=ConvertToUnicode(t2);
	
	var zr = GetAzanNoon(m, d, lg, lat);
	MM_findObj(noon).innerHTML=ConvertToUnicode(zr);
	temp = MM_findObj("spanNoon");
	if (temp) temp.innerHTML = zr.substring(0,5);
	
	var t3 = GetSunset(m, d, lg, lat);
	MM_findObj(sunset).innerHTML=ConvertToUnicode(t3);
	
	var t4 = GetAzanNight(m, d, lg, lat);
	MM_findObj(night).innerHTML=ConvertToUnicode(t4);
	temp = MM_findObj("spanNight");
	if (temp) temp.innerHTML = t4.substring(0,5);
}

function main(m, d, lg, lat)
{
	ShowInfo(m, d, lg, lat, "t1", "t2", "zr", "t3", "t4");
}

function sun(m,d,h,lg)
{
	if(m<7)
		d= 31*(m-1)+d+h/24;
	else
		d=6+30*(m-1)+d+h/24;
	var M=74.2023+0.98560026*d;
	var L=-2.75043+0.98564735*d;
	var lst=8.3162159+0.065709824*Math.floor(d)+1.00273791*24*(d%1)+lg/15;	
	var e=0.0167065;
	var omega=4.85131-0.052954*d;
	var ep=23.4384717+0.00256*cosd(omega);
	var ed=180.0/Math.PI*e;
	var u=M;
	for(var i=1;i<5;i++)
		u=u-(u-ed*sind(u)-M)/(1-e*cosd(u));
	var v=2*atand(tand(u/2)*Math.sqrt((1+e)/(1-e)));
	var theta=L+v-M-0.00569-0.00479*sind(omega);
	var delta=asind(sind(ep)*sind(theta));
	var alpha=180.0/Math.PI*Math.atan2(cosd(ep)*sind(theta),cosd(theta));
	if(alpha>=360)
		alpha-=360;
	var ha=lst-alpha/15;
	var zr=Round(h-ha,24);
	return ([zr,delta])
}

function ephemeris_init()
{
		lgs= [0,48.52,48.51,47.8,0,48.1,48.43,49.27,48.27];
		lats=[0,34.8,34.20,39.9,0,34.5,35.12,35.2,34.52];
}

function coord()
{
	var c=document.getElementById("cities");
	var i = c.selectedIndex;
	if(i==0)
	{
		document.getElementById("longitude").value="";
		document.getElementById("latitude").value="";
	}
	else
	{
		document.getElementById("longitude").value=lgs[i].toString();
		document.getElementById("latitude").value=lats[i].toString();
	}
}
function sind(x){return(Math.sin(Math.PI/180.0*x));}
function cosd(x){return(Math.cos(Math.PI/180.0*x));}
function tand(x){return(Math.tan(Math.PI/180.0*x));}
function atand(x){return(Math.atan(x)*180.0/Math.PI);}
function asind(x){return(Math.asin(x)*180.0/Math.PI);}
function acosd(x){return(Math.acos(x)*180.0/Math.PI);}
function sqrt(x){return(Math.sqrt(x));}
function frac(x){return(x%1);}
function floor(x){return(Math.floor(x));}
function ceil(x){return(Math.ceil(x));}
function loc2hor(z,d,p){
	return(acosd((cosd(z)-sind(d)*sind(p))/cosd(d)/cosd(p))/15);
}
function Round(x,a){
	var tmp=x%a;
	if(tmp<0)
		tmp+=a;
	return(tmp)
}
function hms(x, month)
{
	x=Math.floor(3600*x);
	h=Math.floor(x/3600);
	mp=x-3600*h;
	m=Math.floor(mp/60);
	s=Math.floor(mp-60*m);
	if (month <= 6)
		h++;	
	return(((h<10)? "0" : "")+h.toString()+":"+((m<10)? "0" : "")+m.toString()+":"+((s<10)? "0" : "")+s.toString())
}


function Calculate2()
{
	//var i = document.getElementById("cities").selectedIndex;
	var i=30;
	if(i==0)
	{
		alert('لطفا مرکز استان را انتخاب کنید');
		return;
	}
week= new Array("یک شنبه","دو شنبه","سه شنبه","چهار شنبه","پنج شنبه","جمعه","شنبه")
months = new Array("فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند");
a = new Date(); d= a.getDay(); day= a.getDate(); month =a.getMonth()+1; year= a.getYear(); if (year== 0){year=2000;}
 if (year<100){year +=1900;} y=1; for(i=0;i<3000;i+=4) { if (year==i)
{y=2;} } for(i=1;i<3000;i+=4) { if (year==i) {y=3;} } if (y==1) {
year -= ( (month < 3) || ((month == 3) && (day < 21)) )?
622:621; switch (month) { case 1: (day<21)? (month=10,
day+=10):(month=11, day-=20); break; case 2: (day<20)? (month=11,
day+=11):(month=12, day-=19); break; case 3: (day<21)? (month=12,
day+=9):(month=1, day-=20); break; case 4: (day<21)? (month=1,
day+=11):(month=2, day-=20); break; case 5: case 6: (day<22)?
(month-=3, day+=10):(month-=2, day-=21); break; case 7: case 8: case 9:
(day<23)? (month-=3, day+=9):(month-=2, day-=22); break; case
10:(day<23)? (month=7, day+=8):(month=8, day-=22); break; case 11:
case 12:(day<22)? (month-=3, day+=9):(month-=2, day-=21); break;
default: break; } } if (y==2) { year -= ( (month < 3) || ((month ==
3) && (day < 20)) )? 622:621; switch (month) { case 1:
(day<21)? (month=10, day+=10):(month=11, day-=20); break; case 2:
(day<20)? (month=11, day+=11):(month=12, day-=19); break; case 3:
(day<20)? (month=12, day+=10):(month=1, day-=19); break; case 4:
(day<20)? (month=1, day+=12):(month=2, day-=19); break; case 5:
(day<21)? (month=2, day+=11):(month=3, day-=20); break; case 6:
(day<21)? (month=3, day+=11):(month=4, day-=20); break; case 7:
(day<22)? (month=4, day+=10):(month=5, day-=21); break; case 8:
(day<22)? (month=5, day+=10):(month=6, day-=21); break; case 9:
(day<22)? (month=6, day+=10):(month=7, day-=21); break; case
10:(day<22)? (month=7, day+=9):(month=8, day-=21); break; case
11:(day<21)? (month=8, day+=10):(month=9, day-=20); break; case
12:(day<21)? (month=9, day+=10):(month=10, day-=20); break; default:
break; } } if (y==3) { year -= ( (month < 3) || ((month == 3)
&& (day < 21)) )? 622:621; switch (month) { case 1:
(day<20)? (month=10, day+=11):(month=11, day-=19); break; case 2:
(day<19)? (month=11, day+=12):(month=12, day-=18); break; case 3:
(day<21)? (month=12, day+=10):(month=1, day-=20); break; case 4:
(day<21)? (month=1, day+=11):(month=2, day-=20); break; case 5: case
6: (day<22)? (month-=3, day+=10):(month-=2, day-=21); break; case 7:
case 8: case 9: (day<23)? (month-=3, day+=9):(month-=2, day-=22);
break; case 10:(day<23)? (month=7, day+=8):(month=8, day-=22);
break; case 11: case 12:(day<22)? (month-=3, day+=9):(month-=2,
day-=21); break; default: break; } }
//document.write(week[d]+" "+day+" "+months[month-1]+" "+ year);

	var m=month;
	var d=day;
	document.getElementById("day").value=d;
	document.getElementById("month").selectedIndex=m-1;
	//var m=document.getElementById("month").selectedIndex+1;
	//var m=12;
	//var d=6;
	//var d=eval(document.getElementById("day").value);
	var lg=48.52;
//	var lg=eval(document.getElementById("longitude").value);
	var lat=34.8;
//	var lat=eval(document.getElementById("latitude").value);
	
	main(m, d, lg, lat);
	
	SetTitle2(d);
}

function SetTitle2(d)
{
week= new Array("یک شنبه","دو شنبه","سه شنبه","چهار شنبه","پنج شنبه","جمعه","شنبه")
months = new Array("فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند");
a = new Date(); d= a.getDay(); day= a.getDate(); month =a.getMonth()+1; year= a.getYear(); if (year== 0){year=2000;}
 if (year<100){year +=1900;} y=1; for(i=0;i<3000;i+=4) { if (year==i)
{y=2;} } for(i=1;i<3000;i+=4) { if (year==i) {y=3;} } if (y==1) {
year -= ( (month < 3) || ((month == 3) && (day < 21)) )?
622:621; switch (month) { case 1: (day<21)? (month=10,
day+=10):(month=11, day-=20); break; case 2: (day<20)? (month=11,
day+=11):(month=12, day-=19); break; case 3: (day<21)? (month=12,
day+=9):(month=1, day-=20); break; case 4: (day<21)? (month=1,
day+=11):(month=2, day-=20); break; case 5: case 6: (day<22)?
(month-=3, day+=10):(month-=2, day-=21); break; case 7: case 8: case 9:
(day<23)? (month-=3, day+=9):(month-=2, day-=22); break; case
10:(day<23)? (month=7, day+=8):(month=8, day-=22); break; case 11:
case 12:(day<22)? (month-=3, day+=9):(month-=2, day-=21); break;
default: break; } } if (y==2) { year -= ( (month < 3) || ((month ==
3) && (day < 20)) )? 622:621; switch (month) { case 1:
(day<21)? (month=10, day+=10):(month=11, day-=20); break; case 2:
(day<20)? (month=11, day+=11):(month=12, day-=19); break; case 3:
(day<20)? (month=12, day+=10):(month=1, day-=19); break; case 4:
(day<20)? (month=1, day+=12):(month=2, day-=19); break; case 5:
(day<21)? (month=2, day+=11):(month=3, day-=20); break; case 6:
(day<21)? (month=3, day+=11):(month=4, day-=20); break; case 7:
(day<22)? (month=4, day+=10):(month=5, day-=21); break; case 8:
(day<22)? (month=5, day+=10):(month=6, day-=21); break; case 9:
(day<22)? (month=6, day+=10):(month=7, day-=21); break; case
10:(day<22)? (month=7, day+=9):(month=8, day-=21); break; case
11:(day<21)? (month=8, day+=10):(month=9, day-=20); break; case
12:(day<21)? (month=9, day+=10):(month=10, day-=20); break; default:
break; } } if (y==3) { year -= ( (month < 3) || ((month == 3)
&& (day < 21)) )? 622:621; switch (month) { case 1:
(day<20)? (month=10, day+=11):(month=11, day-=19); break; case 2:
(day<19)? (month=11, day+=12):(month=12, day-=18); break; case 3:
(day<21)? (month=12, day+=10):(month=1, day-=20); break; case 4:
(day<21)? (month=1, day+=11):(month=2, day-=20); break; case 5: case
6: (day<22)? (month-=3, day+=10):(month-=2, day-=21); break; case 7:
case 8: case 9: (day<23)? (month-=3, day+=9):(month-=2, day-=22);
break; case 10:(day<23)? (month=7, day+=8):(month=8, day-=22);
break; case 11: case 12:(day<22)? (month-=3, day+=9):(month-=2,
day-=21); break; default: break; } }
//document.write(week[d]+" "+day+" "+months[month-1]+" "+ year);

	var m=months[month-1];
	var d=week[d]+" "+day;
	
	var month = document.getElementById("month");
	var city  = document.getElementById("cities")
	document.getElementById("tdTitle").innerHTML = "اوقات شرعی " + ConvertToUnicode(d + " " + m + " " + document.getElementById("spanYear").innerHTML) + " (  به افق همدان)";
//	document.getElementById("tdTitle").innerHTML = "اوقات شرعی " + ConvertToUnicode(d + " " + month.options[month.selectedIndex].text + " " + document.getElementById("spanYear").innerHTML) + " (به افق " + city.options[city.selectedIndex].text + ")";
}

