﻿/*
Created by: Daniel Katz (www.danielkatz.net)
Date: 28/08/2008
For: mabtim.com

(c) All right reserved
*/
var h_ones = Array("א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט");
var h_tens = Array("י", "כ", "ל", "מ", "נ", "ס", "ע", "פ", "צ");
var h_hundreds = Array("ק", "ר", "ש", "ת");

function toHebrewDigits(num) {
    var hebrew = "";
    var digits = 0;
    var idx;

    if (num >= 1000) {
        idx = Math.floor(num / 1000);
        hebrew += toHebrewDigits(idx);
        num -= idx * 1000;
    };

    if (num >= 100) {
        do {
            idx = Math.floor(num / 100);
            idx = (idx > 4) ? 4 : idx;
            hebrew += h_hundreds[idx - 1];
            digits++;
            num -= idx * 100;

            if (digits > 0 && num < 200 && num >= 100 && num % 100 == 0) {
                hebrew += '"';
            };
        } while (num >= 100);
    };

    if (num > 0 && digits > 0 && num % 10 == 0) {
        hebrew += '"';
    };

    if (num == 15) {
        hebrew += 'ט"ו';
        num -= 15;

        return hebrew;
    };

    if (num == 16) {
        hebrew += 'ט"ז';
        num -= 16;

        return hebrew;
    };

    if (num >= 10) {
        idx = Math.floor(num / 10);
        hebrew += h_tens[idx - 1];
        digits++;
        num -= idx * 10;
    };

    if (num > 0 && digits > 0) {
        hebrew += '"';
    };

    if (num >= 1) {
        hebrew += h_ones[num - 1];
        digits++;
    };

    if (digits == 1) {
        hebrew += "'";
    };

    return hebrew;
}

function getMidnightTime(nDateG) {
    return new Date(nDateG.getFullYear(), nDateG.getMonth(), nDateG.getDate());
}

// BEGIN ************** Source from http://www.geocities.com/DafAWeek/HebCalSampleSource.html **************
function MonSinceFirstMolad(a) { var b; a--; b = Math.floor(a / 19) * 235; a = a % 19; b += 12 * a; if (a >= 17) { b += 6 } else if (a >= 14) { b += 5 } else if (a >= 11) { b += 4 } else if (a >= 8) { b += 3 } else if (a >= 6) { b += 2 } else if (a >= 3) { b += 1 } return b }
function IsLeapYear(a) { var b; b = a % 19; return (b == 3 || b == 6 || b == 8 || b == 11 || b == 14 || b == 17 || b == 0) }
function Tishrei1(a) { var b; var c; var d; var e; var f; var g; b = MonSinceFirstMolad(a); c = 793 * b; c += 204; d = Math.floor(c / 1080); c = c % 1080; d += b * 12; d += 5; e = Math.floor(d / 24); d = d % 24; e += 29 * b; e += 2; f = e % 7; if (!IsLeapYear(a) && f == 3 && (d * 1080) + c >= (9 * 1080) + 204) { f = 5; e += 2 } else if (IsLeapYear(a - 1) && f == 2 && (d * 1080) + c >= (15 * 1080) + 589) { f = 3; e += 1 } else { if (d >= 18) { f += 1; f = f % 7; e += 1 } if (f == 1 || f == 4 || f == 6) { f += 1; f = f % 7; e += 1 } } e -= 2067025; g = new Date(1900, 0, 1); g.setDate(g.getDate() + e); return g }
function LengthOfYear(a) { var b; var c; var d; b = Tishrei1(a); c = Tishrei1(a + 1); d = (c - b) / (1000 * 60 * 60 * 24); return Math.round(d) }
function GregToHeb(a) { var b; var c; var d; var e; var f; var g; var h; var i; var j; var k; var l; var m; var n; var o = new Date(1900, 0, 1); e = 29 + (12 / 24) + (793 / (1080 * 24)); f = e * (235 / 19); g = Math.round((a - o) / (24 * 60 * 60 * 1000)); g += 2067025; b = Math.floor(g / f) + 1; h = Tishrei1(b); if (SameDate(h, a)) { c = 1; d = 1 } else { if (h < a) { while (Tishrei1(b + 1) <= a) { b += 1 } } else { b -= 1; while (Tishrei1(b) > a) { b -= 1 } } g = (a - Tishrei1(b)) / (24 * 60 * 60 * 1000); g = Math.round(g); i = LengthOfYear(b); k = i == 353 || i == 383; l = i == 355 || i == 385; j = IsLeapYear(b); c = 1; do { switch (c) { case 1: case 5: case 6: case 8: case 10: case 12: m = 30; break; case 4: case 7: case 9: case 11: case 13: m = 29; break; case 6: m = 30; break; case 2: m = (l ? 30 : 29); break; case 3: m = (k ? 29 : 30); break } if (g >= m) { n = true; if (j || c != 5) { c++ } else { c += 2 } g -= m } else { n = false } } while (n)d = g + 1 } return c + "/" + d + "/" + b }
function SameDate(a, b) { return (a.getFullYear() == b.getFullYear() && a.getMonth() == b.getMonth() && a.getDate() == b.getDate()) } 
function FormatDateH(a) { var b = new Array(); var c = ""; var d = ""; b = a.split("/"); switch (Number(b[0])) { case 1: c = "תשרי"; break; case 2: c = "חשוון"; break; case 3: c = "כסלו"; break; case 4: c = "טבת"; break; case 5: c = "שבט"; break; case 6: c = "אדר א'"; break; case 7: c = (IsLeapYear(Number(b[2])) ? "אדר" : "אדר ב'"); break; case 8: c = "ניסן"; break; case 9: c = "אייר"; break; case 10: c = "סיון"; break; case 11: c = "תמוז"; break; case 12: c = "אב"; break; case 13: c = "אלול"; break } d += toHebrewDigits(b[1]) + " " + c + " " + toHebrewDigits(b[2]); return d }
// END   ************** Source from http://www.geocities.com/DafAWeek/HebCalSampleSource.html **************

function formatHebrewDay(day, verbal) {
    var hebrew = "";

    if (verbal)
        hebrew += "יום ";

    switch (day) {
        case 0:
            hebrew += "ראשון";
            break;
        case 1:
            hebrew += "שני";
            break;
        case 2:
            hebrew += "שלישי";
            break;
        case 3:
            hebrew += "רביעי";
            break;
        case 4:
            hebrew += "חמישי";
            break;
        case 5:
            hebrew += "שישי";
            break;
        case 6:
            hebrew += "שבת";
            break;
    };

    return hebrew;
}

function getHebrewDate() {
    var d = new Date();
    return formatHebrewDay(d.getDay(), false) + " " + FormatDateH(GregToHeb(getMidnightTime(d)));
}

function writeHebrewDate() {
    document.write(getHebrewDate());
}

function findAbsolutePosition(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    return [curleft, curtop];
}

function initalizeMultilevelMenu(element) {
    if (element) {
        element.find("li > ul").hide();
        
        element.find("li:has(a)").click(function() {
            window.location = $(this).find("a:first").attr("href");
        });
        
        element.find("li:has(ul)")
                .mouseover(function() {
                    var pos = findAbsolutePosition(this);
                    $(this).children("ul:first")
                        .css("position", "absolute")
                        .css("left", pos[0])
                        .css("top", pos[1] + $(this).outerHeight())
                        .css("min-width", $(this).outerWidth())
                        .show();
                })
                .mouseout(function() {
                    $(this).children("ul:first").hide();
                });
    } else {
        alert("initalizeMultilevelMenu error");
    }
}