﻿var dkSolar = 0;
var dkGregorian = 1;

var DaysOfMonths = new Array();
var LeapMonth = new Array();
var DaysToMonth = new Array();

DaysOfMonths = [[31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29], [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]];
LeapMonth = [12, 2];
DaysToMonth = [[0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365], [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]];

function Integer(val)
{
this.value = val;
}

function IsLeapYear(DateKind, Year)
{
if (DateKind == dkSolar) 
return ((((Year + 38) * 31) % 128) <= 30);
else
return (((Year % 4) == 0) && (((Year % 100) != 0) || ((Year % 400) == 0)));
}

function DaysOfMonth(DateKind, Year, Month)
{
var Result;
if ((Year != 0) && ((Month <= 12) && (Month >= 1))) 
{
Result = DaysOfMonths[DateKind][Month - 1];
if ((Month == LeapMonth[DateKind]) && IsLeapYear(DateKind, Year)) Result++;
}
else
Result = 0;
return Result;
}

function IsDateValid(DateKind, Year, Month, Day)
{
return ((Year!= 0) && (Month >= 1) && (Month <= 12) && (Day >= 1) && Day <= (DaysOfMonth(DateKind, Year, Month)));
}

function DaysToDate(DateKind, Year, Month, Day)
{
var Result;
if (IsDateValid(DateKind, Year, Month, Day))
{
Result = DaysToMonth[DateKind][Month - 1] + Day;
if ((Month > LeapMonth[DateKind]) && IsLeapYear(DateKind, Year)) Result++;
}
else
Result = 0;
return Result;
}

function DateOfDay(DateKind, Days, Year, Month, Day)
{
var LeapDay = 0;
Month.value = 0;
Day.value = 0;
for (var m = 2; m <= 13; m++) 
{
if ((m > LeapMonth[DateKind]) && (IsLeapYear(DateKind, Year))) LeapDay = 1;
if (Days <= (DaysToMonth[DateKind][m - 1] + LeapDay))
{
Month.value = m - 1;
if (Month.value <= LeapMonth[DateKind]) LeapDay = 0;
Day.value = Days - (DaysToMonth[DateKind][Month.value - 1] + LeapDay);
break;
}
}
return IsDateValid(DateKind, Year, Month.value, Day.value);
}

function GregorianToSolar(Year, Month, Day)
{
var	LeapDay, Days, PrevGregorianLeap, Result;
if (IsDateValid(dkGregorian, Year.value, Month.value, Day.value))
{
PrevGregorianLeap = IsLeapYear(dkGregorian, Year.value - 1);
Days = DaysToDate(dkGregorian, Year.value, Month.value, Day.value);
Year.value -= 622;
if (IsLeapYear(dkSolar, Year.value)) LeapDay = 1
else LeapDay = 0;
if (PrevGregorianLeap && (LeapDay == 1)) Days += 287
else Days += 286;
if (Days > (365 + LeapDay))
{
Year.value++;
Days -= (365 + LeapDay);
}
Result = DateOfDay(dkSolar, Days, Year.value, Month, Day);
}
else Result = false;
return Result;
}

function SolarToGregorian(Year, Month, Day)
{
var LeapDay, Days, PrevSolarLeap, Result;
if (IsDateValid(dkSolar, Year.value, Month.value, Day.value))
{
PrevSolarLeap = IsLeapYear(dkSolar, Year.value - 1);
Days = DaysToDate(dkSolar, Year.value, Month.value, Day.value);
Year.value += 621;
if (IsLeapYear(dkGregorian, Year.value)) LeapDay = 1
else LeapDay = 0;
if (PrevSolarLeap && (LeapDay = 1)) Days += 80
else Days += 79;
if (Days > (365 + LeapDay))
{
Year.value++;
Days -= (365 + LeapDay);
}
Result = DateOfDay(dkGregorian, Days, Year.value, Month, Day);
}
else Result = false;
return Result;
}

var MonthNames = new Array();
var WeekDayNames = new Array();
var MonthDayNames = new Array();
MonthNames = ["فروردین", "اردیبهشت", "خرداد", "تیر", "امرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"];
WeekDayNames = ["یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه", "شنبه"];
MonthDayNames = ["اول", "دوم", "سوم", "چهارم", "پنجم", "ششم", "هفتم", "هشتم", "نهم", "دهم", "یازدهم", "دوازدهم", "سیزدهم", "چهاردهم", "پانزدهم", "شانزدهم", "هفدهم", "هجدهم", "نوزدهم", "بیستم", "بیست و یکم", "بیست و دوم", "بیست و سوم", "بیست و چهارم", "بیست و پنجم", "بیست و ششم", "بیست و هفتم", "بیست و هشتم", "بیست و نهم", "سی ام", "سی و یکم"];

function ConvertStr(DateStr, Format)
{
var Result;
var ObjDate = new Date();
var SplDate = DateStr.split("/");			
var M = new Integer(parseInt(SplDate[0]));
var D = new Integer(parseInt(SplDate[1]));
var Y = new Integer(parseInt(SplDate[2]));
ObjDate.setFullYear(Y.value);
ObjDate.setMonth(M.value - 1);
ObjDate.setDate(D.value);
var W = ObjDate.getDay();

if (GregorianToSolar(Y, M, D))
switch (Format)
{
case 0:
Result = CreateFaNo(D.value) + "/" + CreateFaNo(M.value) + "/" + CreateFaNo(Y.value);
break;
case 1:
Result = CreateFaNo(D.value) + "/" + CreateFaNo(M.value) + "/" + CreateFaNo((Y.value - Math.floor(Y.value / 100) * 100));
break;
case 2:
Result = (CreateFaNo(D.value) + " " + MonthNames[M.value - 1] + " " + CreateFaNo(Y.value));
break;
case 3:
Result = (MonthDayNames[D.value - 1] + " " + MonthNames[M.value - 1] + " " + CreateFaNo(Y.value));
break;
case 4:
Result = (MonthDayNames[D.value - 1] + " " + MonthNames[M.value - 1] + " ماه " + CreateFaNo(Y.value));		
break;
case 5:
Result = WeekDayNames[W] + "، " + CreateFaNo(D.value) + "/" + CreateFaNo(M.value) + "/" + CreateFaNo(Y.value);
break;
case 6:
Result = WeekDayNames[W] + "، " + CreateFaNo(D.value) + "/" + CreateFaNo(M.value) + "/" + CreateFaNo((Y.value - Math.floor(Y.value / 100) * 100));
break;
case 7:
Result = WeekDayNames[W] + "، " + (CreateFaNo(D.value) + " " + MonthNames[M.value - 1] + " " + CreateFaNo(Y.value));
break;
case 8:
Result = WeekDayNames[W] + "، " + (MonthDayNames[D.value - 1] + " " + MonthNames[M.value - 1] + " " + CreateFaNo(Y.value));
break;
case 9:
Result = WeekDayNames[W] + "، " + (MonthDayNames[D.value - 1] + " " + MonthNames[M.value - 1] + " ماه  " + CreateFaNo(Y.value));		
break;
default:
Result = CreateFaNo(D.value) + "/" + CreateFaNo(M.value) + "/" + CreateFaNo(Y.value);
break;
}
else
Result = "Error converting date.";
return Result;
}	

function ConvertDateTag(DateStr, Format)
{
return ConvertStr(DateStr, Format);
}

function ConvertArchiveTag(DatesStr, Format)
{
var Dates = new Array();
Dates = DatesStr.split("-");
var Result = ConvertStr(Dates[0], Format) + " - " + ConvertStr(Dates[1], Format);
return "<div align=right dir=rtl>" + Result + "</div>";
}

function CreateFaNo(No)
{
var intOrgin, intLen, intOut, arrNo, intFar;

intOut = '';
intFar = '';
intOrgin = No;
arrNo = new Array();
intLen = new String(intOrgin);

if (intLen.length == 1)
{
intFar = No;

switch (intFar)
{
case 0 :
intFar = "0";
break; 
case 1 :
intFar = "1";
break; 
case 2 :
intFar = "2";
break; 
case 3 :
intFar = "3";
break;
case 4 :
intFar = "4";
break; 
case 5 :
intFar = "5";
break; 
case 6 :
intFar = "6";
break; 
case 7 :
intFar = "7";
break; 
case 8 :
intFar = "8";
break; 
case 9 :
intFar = "9";
break;
}

intOut = intFar;
}
else
{		
for (i=0;i<intLen.length;i++)
{
intFar = intLen.charAt(i);

switch (intFar)
{
case "0" :
intFar = "0";
break; 
case "1" :
intFar = "1";
break; 
case "2" :
intFar = "2";
break; 
case "3" :
intFar = "3";
break;
case "4" :
intFar = "4";
break; 
case "5" :
intFar = "5";
break; 
case "6" :
intFar = "6";
break; 
case "7" :
intFar = "7";
break; 
case "8" :
intFar = "8";
break; 
case "9" :
intFar = "9";
break;
}
intOut += intFar;
}
}

return intOut;
}


function clock(){
	var date = new Date();
	var year = date.getFullYear();
	var month = date.getMonth();
	var day = date.getDate();
	var week = date.getDay();
	var hour = date.getHours();
	var minute = date.getMinutes();
	var second = date.getSeconds();
	var days = new Array("یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه");
	var dayname = days[week];
	var months = new Array("January","February","March","April","May","June","July","August","September","October",	"November","December");
	var monthname = months[month];
	
	if (minute < 10) {minute = "0" + minute;}
	if (second < 10) {second = "0" + second;}
	
	var fnow = new Date();
	var fy = fnow.getFullYear();
	var fm = fnow.getMonth()+1;
	var fd = fnow.getDate();
	myDate = fm + "/" + fd + "/" + fy;
	fdate = (ConvertDateTag(myDate, 7));

	now=(fdate + '     ' + hour + ':' + minute + ':' + second);
	tx = document.getElementById("clock");
	tx.firstChild.nodeValue = now;
	//var node = document.createTextNode(now);
	//document.getElementById("clock").replaceChild(node);
	setTimeout("clock()", 1000)
	}
