/*  HeDate version: HeDate.beta01
    This is define a hebrew date Object in J.S.
    The Convert fanction is work from Adar II 5768 to Elul 5770
    (אדר ב' תשס"ח - אלול תש"ע).
    For explanation and more version: http://users2.nofeehost.com/hedate/site.asp
*/
    
function HeDate(year,month,date,day){
    if (typeof(year) == "number"){
        this.year=year;
        this.month=month;
        this.date=date;
        this.day=day;}
    else if ((typeof(year) == "object") && (year.constructor == HeDate)){ // copy constructor
        this.year=year.getYear(0);
        this.month=year.getMonth(0);
        this.date=year.getDate(0);
        this.day=year.getDay(0);}
    else if ((typeof(year) == "object") && (year.constructor == Date)){ // Convert constructor 
        this.day=year.getDay()+1
        d=year.getDate();
        m=year.getMonth()+1;
        y=year.getYear();
        if (y==2008){
            if ((m==3 && d>=8)||(m==4 && d<=5)) {if (m==3) {this.date= d-7;} else {this.date= d+24;} this.month= 6; this.year=5768;}
            else if ((m==4 && d>=6)||(m==5 && d<=5)) {if (m==4) {this.date= d-5;} else {this.date= d+25;} this.month= 7; this.year=5768;}
            else if ((m==5 && d>=6)||(m==6 && d<=3)) {if (m==5) {this.date= d-5;} else {this.date= d+26;} this.month= 8; this.year=5768;}
            else if ((m==6 && d>=4)||(m==7 && d<=3)) {if (m==6) {this.date= d-3;} else {this.date= d+27;} this.month= 9; this.year=5768;}
            else if ((m==7 && d>=4)||(m==8 && d<=1)) {if (m==7) {this.date= d-3;} else {this.date= d+28;} this.month= 10; this.year=5768;}
            else if (m==8 && d>=2) {this.date= d-1; this.month= 11; this.year=5768;}
            else if (m==9 && d<=29) {this.date= d; this.month= 12; this.year=5768;}
            else if ((m==9 && d>=30)||(m==10 && d<=29)) {if (m==9) {this.date= d-29;} else {this.date= d+1;} this.month= 1; this.year=5769;}
            else if ((m==10 && d>=30)||(m==11 && d<=27)) {if (m==10) {this.date= d-29;} else {this.date= d+2;} this.month= 2; this.year=5769;}
            else if ((m==11 && d>=28)||(m==12 && d<=27)) {if (m==11) {this.date= d-27;} else {this.date= d+3;} this.month= 3; this.year=5769;}
            else if (m==12 && d>=28) {this.date= d-27; this.month= 4; this.year=5769;}
        }
        else if (y==2009){
            if (m==1 && d<=25) {this.date= d+4; this.month= 4; this.year=5769;}
            else if ((m==1 && d>=26)||(m==2 && d<=24)) {if (m==1) {this.date= d-25;}else {this.date= d+6;} this.month= 5; this.year=5769;}
            else if ((m==2 && d>=25)||(m==3 && d<=25)) {if (m==2) {this.date= d-24;}else {this.date= d+4;} this.month= 6; this.year=5769;}
            else if ((m==3 && d>=26)||(m==4 && d<=24)) {if (m==3) {this.date= d-25;}else {this.date= d+6;} this.month= 7; this.year=5769;}
            else if ((m==4 && d>=25)||(m==5 && d<=23)) {if (m==4) {this.date= d-24;}else {this.date= d+6;} this.month= 8; this.year=5769;}
            else if ((m==5 && d>=24)||(m==6 && d<=22)) {if (m==5) {this.date= d-23;}else {this.date= d+8;} this.month= 9; this.year=5769;}
            else if ((m==6 && d>=23)||(m==7 && d<=21)) {if (m==6) {this.date= d-22;}else {this.date= d+8;} this.month= 10; this.year=5769;}
            else if ((m==7 && d>=22)||(m==8 && d<=20)) {if (m==7) {this.date= d-21;}else {this.date= d+10;} this.month= 11; this.year=5769;}
            else if ((m==8 && d>=21)||(m==9 && d<=18)) {if (m==8) {this.date= d-20;}else {this.date= d+11;} this.month= 12; this.year=5769;}
            else if ((m==9 && d>=19)||(m==10 && d<=18)) {if (m==9) {this.date= d-18;}else {this.date= d+12;} this.month= 1; this.year=5770;}
            else if ((m==10 && d>=19)||(m==11 && d<=17)) {if (m==10) {this.date= d-18;}else {this.date= d+13;} this.month= 2; this.year=5770;}
            else if ((m==11 && d>=18)||(m==12 && d<=17)) {if (m==11) {this.date= d-17;}else {this.date= d+13;} this.month= 3; this.year=5770;}
            else if (m==12 && d>=18) {this.date= d-17;  this.month= 4; this.year=5770;}
        }
        else if (y==2010){
            if (m==1 && d<=15) {this.date= d+14; this.month= 4; this.year=5770;}
            else if ((m==1 && d>=16)||(m==2 && d<=14)) {if (m==1) {this.date= d-15;}else {this.date= d+16;} this.month= 5; this.year=5770;}
            else if ((m==2 && d>=15)||(m==3 && d<=15)) {if (m==2) {this.date= d-14;}else {this.date= d+14;} this.month= 6; this.year=5770;}
            else if ((m==3 && d>=16)||(m==4 && d<=14)) {if (m==3) {this.date= d-15;}else {this.date= d+16;} this.month= 7; this.year=5770;}
            else if ((m==4 && d>=15)||(m==5 && d<=13)) {if (m==4) {this.date= d-14;}else {this.date= d+16;} this.month= 8; this.year=5770;}
            else if ((m==5 && d>=14)||(m==6 && d<=12)) {if (m==5) {this.date= d-13;}else {this.date= d+18;} this.month= 9; this.year=5770;}
            else if ((m==6 && d>=13)||(m==7 && d<=11)) {if (m==6) {this.date= d-12;}else {this.date= d+18;} this.month= 10; this.year=5770;}
            else if ((m==7 && d>=12)||(m==8 && d<=10)) {if (m==7) {this.date= d-11;}else {this.date= d+20;} this.month= 11; this.year=5770;}
            else if ((m==8 && d>=11)||(m==9 && d<=8)) {if (m==8) {this.date= d-10;}else {this.date= d+21;} this.month= 12; this.year=5770;}
        }
    }
}

function getYear(display){
    if (display==0) return this.year;
    if (display==1) return gimatria(this.year);
    return gimatria(this.year);
}HeDate.prototype.getYear = getYear;

function getMonth(display){
    if (display==0) return this.month;
    if (LeapYear(this.year)==true && this.month==6){
        if (this.date>0)
            return month(this.month)+ " ב'";
        else
            return month(this.month)+ " א'";
        }
    else
        return month(this.month);
   
}HeDate.prototype.getMonth = getMonth;

function getDate(display){
    if (display==0) return this.date;
    if (display==1) return gimatria(Math.abs(this.date));
    return gimatria(Math.abs(this.date));
}HeDate.prototype.getDate = getDate;

function getDay(display){
    if (display==0) return this.day;
    if (display==1) return day(this.day);
    return day(this.day);
}HeDate.prototype.getDay = getDay;

function toString(){
    var ans=""
    if (this.getDay(1)!="")
        var ans=this.getDay(1) + ", "
    return (ans + this.getDate(1) + " ב" + this.getMonth(1) + " " + this.getYear(1));
}HeDate.prototype.toString = toString;

function gimatria(num){
	var ans="";
	var temp=num%1000;
	var abc=" אבגדהוזחטיכלמנסעפצקרשת"
	
	if (temp>=100 && temp<=999) 	//מאות
		{var hundreds = (temp-temp%100)/100;
		temp=temp%100;
		while (hundreds >= 4)
			{ans = ans + abc.charAt(22);
			hundreds = hundreds - 4;}
		if (hundreds >> 0)
			ans = ans + abc.charAt(18 + hundreds);}

	if (temp>=10 && temp<=99) 	//עשרות
		{var tens=(temp-temp%10)/10;
		temp=temp%10;
		if ((tens==1) && ((temp==5)||(temp==6))) //ט"ו  ט"ז
			{tens = tens-1;
			temp = temp + 1;}
		ans = ans + abc.charAt(9 + tens);
		}

	if (temp>=1 && temp<=9) 	// יחידות
		ans = ans + abc.charAt(temp);

	if (ans.length>=2)		//הוספת גרש או גרשיים
		ans = ans.substring(0,(ans.length-1)) + '"' + ans.substring(ans.length-1);
	else if (ans.length==1)
		ans =ans + "'";

	if (num>=1000 && num<=9999) //אלפים
		ans = abc.charAt((num-num%1000)/1000) + "'" + ans;

	return ans
}

function LeapYear(year){
	year=year%19;
	if (year==3 || year==6 || year==8 || year==11 || year==14 || year==17 || year==0)
		return true;
	else
		return false;
}

function month(intMonth){
	var months = ['','תשרי','חשון','כסלו','טבת','שבט','אדר','ניסן','אייר','סיון','תמוז','אב','אלול']
	return months[intMonth];
}

function day(intDay){
    var day = ['','יום ראשון','יום שני','יום שלישי','יום רביעי','יום חמישי','יום שישי','שבת']
    if (intDay>0 && intDay<=7)
        return ""; //day[intDay];
    else
        return "";
}

function omer(heDate,display){
    var days=-1;
    if (heDate.month==7 && heDate.date>15)
        days=heDate.date - 15;
    else if (heDate.month==8)
        days=heDate.date + 15;
    else if (heDate.month==9 && heDate.date<6)
        days=heDate.date + 44;
    if (display==0)
        return days;
    else 
        if (days>=1 && days<=49){
            var show= new Array(50);
            show[1]="היום יום אחד לעומר"; show[2]="היום שני ימים לעומר"; show[3]="היום שלושה ימים לעומר";
            show[4]="היום ארבעה ימים לעומר"; show[5]="היום חמישה ימים לעומר"; show[6]="היום שישה ימים לעומר";
            show[7]="היום שיבעה ימים לעומר, שהם שבוע אחד"; show[8]="היום שמונה ימים לעומר, שהם שבוע אחד ויום אחד"; show[9]="היום תישעה ימים לעומר, שהם שבוע אחד ושני ימים";
            show[10]="היום עשרה ימים לעומר, שהם שבוע אחד ושלושה ימים"; show[11]="היום אחד עשר יום לעומר, שהם שבוע אחד וארבעה ימים"; show[12]="היום שנים עשר יום לעומר, שהם שבוע אחד וחמישה ימים";
            show[13]="היום שלושה עשר יום לעומר, שהם שבוע אחד ושישה ימים"; show[14]="היום ארבעה עשר יום לעומר, שהם שני שבועות"; show[15]="היום חמישה עשר יום לעומר, שהם שני שבועות ויום אחד";
            show[16]="היום שישה עשר יום לעומר, שהם שני שבועות ושני ימים"; show[17]="היום שיבעה עשר יום לעומר, שהם שני שבועות ושלושה ימים"; show[18]="היום שמונה עשר יום לעומר, שהם שני שבועות וארבעה ימים";
            show[19]="היום תישעה עשר יום לעומר, שהם שני שבועות וחמישה ימים"; show[20]="היום עשרים יום לעומר, שהם שני שבועות ושישה ימים"; show[21]="היום אחד ועשרים יום לעומר, שהם שלושה שבועות";
            show[22]="היום שנים ועשרים יום לעומר, שהם שלושה שבועות ויום אחד"; show[23]="היום שלושה ועשרים יום לעומר, שהם שלושה שבועות ושני ימים"; show[24]="היום ארבעה ועשרים יום לעומר, שהם שלושה שבועות ושלושה ימים";
            show[25]="היום חמישה ועשרים יום לעומר, שהם שלושה שבועות וארבעה ימים"; show[26]="היום שישה ועשרים יום לעומר, שהם שלושה שבועות וחמישה ימים"; show[27]="היום שיבעה ועשרים יום לעומר, שהם שלושה שבועות ושישה ימים";
            show[28]="היום שמונה ועשרים יום לעומר, שהם ארבעה שבועות"; show[29]="היום תישעה ועשרים יום לעומר, שהם ארבעה שבועות ויום אחד"; show[30]="היום שלושים יום לעומר, שהם ארבעה שבועות ושני ימים";
            show[31]="היום אחד ושלושים יום לעומר, שהם ארבעה שבועות ושלושה ימים"; show[32]="היום שנים ושלושים יום לעומר, שהם ארבעה שבועות וארבעה ימים"; show[33]="היום שלושה ושלושים יום לעומר, שהם ארבעה שבועות וחמישה ימים";
            show[34]="היום ארבעה ושלושים יום לעומר, שהם ארבעה שבועות ושישה ימים"; show[35]="היום חמישה ושלושים יום לעומר, שהם חמישה שבועות"; show[36]="היום שישה ושלושים יום לעומר, שהם חמישה שבועות ויום אחד";
            show[37]="היום שיבעה ושלושים יום לעומר, שהם חמישה שבועות ושני ימים"; show[38]="היום שמונה ושלושים יום לעומר, שהם חמישה שבועות ושלושה ימים"; show[39]="היום תישעה ושלושים יום לעומר, שהם חמישה שבועות וארבעה ימים";
            show[40]="היום ארבעים יום לעומר, שהם חמישה שבועות וחמישה ימים"; show[41]="היום אחד וארבעים יום לעומר, שהם חמישה שבועות ושישה ימים"; show[42]="היום שנים וארבעים יום לעומר, שהם שישה שבועות";
            show[43]="היום שלושה וארבעים יום לעומר, שהם שישה שבועות ויום אחד"; show[44]="היום ארבעה וארבעים יום לעומר, שהם שישה שבועות ושני ימים"; show[45]="היום חמישה וארבעים יום לעומר, שהם שישה שבועות ושלושה ימים";
            show[46]="היום שישה וארבעים יום לעומר, שהם שישה שבועות וארבעה ימים"; show[47]="היום שיבעה וארבעים יום לעומר, שהם שישה שבועות וחמישה ימים"; show[48]="היום שמונה וארבעים יום לעומר, שהם שישה שבועות ושישה ימים";
            show[49]="היום תישעה וארבעים יום לעומר, שהם שיבעה שבועות";
            return show[days];
        }
        else
            return "";
}
