﻿    // Developed By RAMTIN BOOSTANI [RamtinB@gmail.com]

    var gDaysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var jDaysInMonth = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
    var weekDaysName = new Array('یکشنبه','دوشنبه','سه شنبه','چهارشنبه','پنجشنبه','آدینه','شنبه');
    var pDayName= new Array('یکم','دوم','سوم','چهارم','پنجم','ششم','هفنم','هشتم','نهم','دهم','یازده ام','دوازده ام','سیزده ام','چهارده ام','پانزده ام',
        'شانزده ام','هفده ام','هجده ام','نوزده ام','بیستم','بیست و یکم','بیست و دوم','بیست و سوم','بیست و چهارم','بیست و پنجم','بیست و ششم','بیست و هفتم',
        'بیست و هشتم','بیست و نهم','سی ام','سی و یکم');
    var pMonthName =  new Array('فروردین','اردیبهشت','خورداد','تیر','امرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند','پنجه');
    var zMonthName = new Array('فروشی','اشاوهیشتا','هه اروتات','تشتریا','امرتات','خشتره ویریه','میترا','آبان','آتر','دتوشو','وهومن','سپنتاآرمیتی');
    var zDayPersianName = new Array('اورمزد','وهمن','اردیبهشت','شهریور','سپندارمزد','خورداد','امرداد','دی بآذر','آذر','آبان','خیر','ماه',
        'تیر','گوش','دی بمهر','مهر','سروش','رشن','فروردین','ورهرام','رام','باد','دی بدین','دین','ارد','اشتاد','آسمان','زامیاد','مانتره سپند','انارم');
    var zDayAvestaName = new Array('اهورامزدا','وهومننگه','اشه وهیشته','خشترا وئیریه','سپنته آرمئیتی','هئوروتات','امرتات','دتوش','اتر','اپم','هور خش ات',
        'مآونگهه','تیشتریه','گئوش','دتوش','میترا','سرنوش','رشنو','فروشی','ورتراغنه','رامن','وات','دتوش','دان','اشی ونگهویی','ارشتات','اسمن','-',
        'مانترا سپنت','انغره رشئوچاو');
    var zDayMeaning = new Array('هستی بخش بزرگ دانا','اندیشه نیک','بهترین راستی و پاک','شهریاری نیرومند','فروتنی و مهر پاک','تندرستی و رسایی',
        'بی مرگی و جاودانی','پروردگار','آتش','آب ها','خورشید','ماه','ستاره تیر','گیتی','پروردگار','دوستی','فرمانبرداری','دادگری','فروهر','پیروزی',
        'شادمانی','باد','پروردگار','وجدان','خوشبختی','راستی','آسمان','زمین','گفتار نیک','فروغ و روشنایی بی پایان');
    var zPanjehPersianName = new Array('اهنود','اشتود','سپنتمد','وهوخشتر','وهشتواش','اورداد');
    var zPanjehAvestaName = new Array('اهونه وئیتی','اوشته وئیتی','سپنته مین ا','وهوخشترا','وهیشتوایشتی',' ');
    var zPanjehMeaning = new Array('بخش نخست گاتاها','بخش دوم گاتاها','بخش سوم گاتاها','بخش چهارم گاتاها','بخش پنجم گاتاها','روز اضافه');
    var dayHistory = {'1.1':'جشن نوروز', '1.2':'جشن نوروز', '1.3':'جشن نوروز', '1.4':'جشن نوروز', '1.6':'زاد روز اشوزرتشت', '1.7':'زیارت پیر هریشت', 
        '1.8':'زیارت پیر هریشت', '1.9':'زیارت پیر هریشت', '1.10':'زیارت پیر هریشت', '1.11':'زیارت پیر هریشت', '1.19':'جشن فروردینگان',
        '2.2':'جشن اردیبهشتگان', '2.10':'گاهان بار چهره میدیوزرمگاه', '2.11':'گاهان بار', '2.12':'گاهان بار', '2.13':'گاهان بار', '2.14':'گاهان بار',
        '3.4':'جشن خوردادگان', '3.24':'زیارت ستی پیر، زیارت پیرسبز', '3.25':'زیارت پیرسبز', '3.26':'زیارت پیرسبز', '3.27':'زیارت پیرسبز', '3.28':'زیارت پیرسبز',
        '3.29':'پرسه تیرماه',
        '4.2':'زیارت پیرنارستانه', '4.3':'زیارت پیرنارستانه', '4.4':'زیارت پیرنارستانه', '4.5':'زیارت پیرنارستانه', '4.6':'زیارت پیرنارستانه', '4.8':'گاهان بار چهره میدیوشهیمگاه',
        '4.9':'گاهان بار', '4.10':'جشن تیرگان، گاهان بار', '4.11':'گاهان بار', '4.12':'گاهان بار', '4.13':'زیارت پارس بانو', '4.14':'زیارت پارس بانو', 
        '4.15':'زیارت پارس بانو', '4.16':'زیارت پارس بانو', '4.17':'زیارت پارس بانو',
        '5.3':'جشن امردادگان', '5.12':'زیارت پیر نارکی', '5.13':'زیارت پیر نارکی', '5.14':'زیارت پیر نارکی', '5.15':'زیارت پیر نارکی', '5.16':'زیارت پیر نارکی',
        '5.30':'جشن شهریورگان',
        '6.21':'گاهان بار چهره پیته شهیمگاه', '6.22':'گاهان بار', '6.23':'گاهان بار', '6.24':'گاهان بار', '6.25':'گاهان بار',
        '7.10':'جشن مهرگان', '7.20':'گاهان بار چهره ایاسرمگاه', '7.21':'گاهان بار', '7.22':'گاهان بار', '7.23':'گاهان بار', '7.24':'گاهان بار',
        '8.4':'جشن آبانگان',
        '9.3':'جشن آذرگان', '9.25':'جشن دیگان',
        '10.2':'جشن دیگان', '10.5':'درگذشت اشوزرتشت', '10.9':'جشن دیگان', '10.10':'گاهان بار چهره میدیاریم گاه', '10.11':'گاهان بار', '10.12':'گاهان بار',
        '10.13':'گاهان بار', '10.14':'گاهان بار', '10.15':'گاهان بار', '10.17':'جشن دیگان', '10.26':'جشن بهمنگان',
        '11.10':'جشن سده', '11.25':'پرسه همگانی', '11.29':'جشن اسفندگان',
        '12.25':'گاهان بار چهره همس پت میدیم گاه', '12.26':'گاهان بار', '12.27':'گاهان بار', '12.28':'گاهان بار', '12.29':'گاهان بار'};
  
    

    var gdate = new Date();
    var pdate = Gregorian2Jalali(new Array( gdate.getFullYear(), gdate.getMonth()+1, gdate.getDate() ));
    var zdate = Jalali2Zoroastrian(pdate);
    
    //document.writeln( new Date() + ' -  '+ GetDayName() + '<br>' );
   // document.writeln(pdate + '  -  ' + GetPersianTitle(1387,12,12) + "<br>");
//   var d = new Array(1387,3,4);
//   document.writeln(  GetZDayHirstory(d) + '<br>' );
//   document.writeln( GetZoroastrianTitle(Jalali2Zoroastrian(d),1) + '<br>' );
//   document.writeln( GetZoroastrianTitle(Jalali2Zoroastrian(d),2) + '<br>');
//   document.writeln( GetZoroastrianTitle(Jalali2Zoroastrian(d),3) + '<br>');
//   document.writeln(  GetPersianTitle(d) + '<br>' );
//   document.writeln(  GetDayName(d) + '<br>' );
//    
  
    function Jalali2Zoroastrian(g)
    {
       var jy = g[0];
       var jm = g[1];
       var jd = g[2];
       var dayNo = 0;
       
       for (i=0; i<jm-1 ; i++)
          dayNo += jDaysInMonth[i];
       dayNo += jd-1;
       if (jm>1 && ((jy%4==0 && jy%100!=0) || (jy%400==0)))/* leap and after Feb */
          dayNo++;
     
       var zd = dayNo%30;
       var zm = Math.floor(dayNo/30);
       var zy = jy+2359;
       return new Array(zy, zm, zd);
    }


    function Gregorian2Jalali(g)
    {
       var gy, gm, gd;
       var jy, jm, jd;
       var gDayNo, jDayNo;
       var j_np;
     
       var i;

       gy = g[0]-1600;
       gm = g[1]-1;
       gd = g[2]-1;

       gDayNo = 365*gy+Math.floor((gy+3)/4)-Math.floor((gy+99)/100)+Math.floor((gy+399)/400);
       for (i=0;i<gm;++i)
          gDayNo += gDaysInMonth[i];
       if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0)))
          /* leap and after Feb */
          ++gDayNo;
       gDayNo += gd;
     
       jDayNo = gDayNo-79;
     
       j_np = Math.floor(jDayNo/12053);
       jDayNo %= 12053;
     
       jy = 979+33*j_np+4*Math.floor(jDayNo/1461);
       jDayNo %= 1461;
     
       if (jDayNo >= 366) {
          jy += Math.floor((jDayNo-1)/365);
          jDayNo = (jDayNo-1)%365;
       }
     
       for (i = 0; i < 11 && jDayNo >= jDaysInMonth[i]; ++i) {
          jDayNo -= jDaysInMonth[i];
       }
       jm = i+1;
       jd = jDayNo+1;

    return new Array(jy, jm, jd);
    }
    
    function GetPersianTitle(g)
    {
       var jy = g[0];
       var jm = g[1];
       var jd = g[2];

      return  (pDayName[jd-1] + ' ' + pMonthName[jm-1] + ' ' + jy );
    }
    
    function GetZoroastrianTitle(g, type)
    {
       var zy = g[0];
       var zm = g[1];
       var zd = g[2];
	
       var pDayName = ' روز ' + zDayPersianName[zd];
       var aDayName = zDayAvestaName[zd];
       var dayMeaning = zDayMeaning[zd];
       var monthName = ' از ماه ' + zMonthName[zm];
       
       if (zm==12) 
       {
          pDayName = zPanjehPersianName[zd];
          aDayName = zPanjehAvestaName[zd];
          dayMeaning = zPanjehMeaning[zd];
       }
       if (zm==12) 
        {monthName = " از پنجه "}
       if (zm==12 && zd==5) 
         {monthName = "";}
         
       switch(type)
       {
            case 1: return  (  pDayName  +  monthName + ' سال ' + zy );
            case 2: return  (  pDayName + ' (' +  dayMeaning +') ' + monthName + ' سال ' + zy );
            case 3: return  (  pDayName + ' (' + 'اوستایی : ' + aDayName +' - ' + ' معنی : ' +  dayMeaning +') ' +  monthName + ' سال ' + zy );
       }
       return  (  dayName  + monthName + ' سال ' + zy );
    }
    
    function GetZDayHirstory(g)
    {
       var zm = g[1];
       var zd = g[2];
       var key = zm + '.' + zd;
       var retVal = dayHistory[key];
       if  (retVal == undefined)
            return '';
       return ' - ' + retVal;
    }
    
    function GetNaborTitle(g)
    {
       var zm = g[1];
       var zd = g[2];
       zd-=1;

      if ( zm != 12 && ( zd==1 || zd==11 || zd==13 || zd==20 ) )
       {return "(نبر)";}
       
      return "";
    }
    
    function GetDayName(g)
    {     
       var gy = gdate.getFullYear();
       var gm = gdate.getMonth();
       var gd = gdate.getDate();
      
       var d = new Date();
       d.setFullYear(gy,gm,gd);
      
       return ( weekDaysName[d.getDay()] );
    }
