﻿var	lgs= [49.70,48.30,45.07,51.64,48.68,46.42,57.33,56.29,50.84,59.21,46.28,51.41,48.34,49.59,60.86,48.50,53.06,53.39,47.00,50.86,52.52,50.00,50.88,57.06,47.09,54.44,59.58,48.52,51.59,54.35];
var lats=[34.09,38.25,37.55,32.68,31.32,33.64,37.47,27.19,28.97,32.86,38.08,35.70,33.46,37.28,29.50,36.68,36.57,35.58,35.31,32.33,29.62,36.28,34.64,30.29,34.34,36.84,36.31,34.80,30.67,31.89];
var shamsiday,shamsimonth,i;
function showdate() { 
    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; 
        } 
        } 

shamsiday=day;
shamsimonth=month;
} 
showdate();

document.write()
function main()
{

 i = document.getElementById("cities").selectedIndex;
	var m=shamsimonth;
	var d=shamsiday;
	var lg=lgs[i];
	var lat=lats[i];
	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)
	document.getElementById("t1").innerHTML=hms(t1);
//
//   t2= Sun rise
//
	ep=sun(m,d,6,lg)
	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)
	document.getElementById("t2").innerHTML=hms(t2);
//	
//	zr=Zohr
//
	ep=sun(m,d,12,lg)
	ep=sun(m,d,ep[0],lg)
	zr=ep[0];
	document.getElementById("zr").innerHTML=hms(zr);
//
//   t2= Sun set
//
	ep=sun(m,d,18,lg)
	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)
	document.getElementById("t3").innerHTML=hms(t3);
//
//   t2= Maghreb
//
	ep=sun(m,d,18.5,lg)
	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)
	document.getElementById("t4").innerHTML=hms(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 coord()
{
	var c=document.getElementById("cities");
    i = c.selectedIndex;
	var lg=lgs[i];
	var lat=lats[i];
}
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)
{
	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);
	return(((h<10)? "0" : "")+h.toString()+":"+((m<10)? "0" : "")+m.toString()+":"+((s<10)? "0" : "")+s.toString())
}

