    var MonthName=[Strings.JANUARY,Strings.FEBRUARY,Strings.MARCH,Strings.APRIL,Strings.MAY,Strings.JUNE,Strings.JULY,Strings.AUGUST,Strings.SEPTEMBER,Strings.OCTOBER,Strings.NOVEMBER,Strings.DECEMBER];
    var WeekDayName1=[Strings.SUNDAY,Strings.MONDAY,Strings.TUESDAY,Strings.WEDNESDAY,Strings.THURSDAY,Strings.FRIDAY,Strings.SATURDAY];
    var WeekDayName2=[Strings.MONDAY,Strings.TUESDAY,Strings.WEDNESDAY,Strings.THURSDAY,Strings.FRIDAY,Strings.SATURDAY,Strings.SUNDAY];

    var LightGrayColor = "#eeeeee";
    var DarkGrayColor = "#eeeeee";
    var LightGreenColor = "#cccccc";
    var DarkGreenColor = "#eeeecc";

    function Calendar(pDate)
    {
        this.Date=pDate.getDate();//selected date
        this.Month=pDate.getMonth();//selected month number
        this.Year=pDate.getFullYear();//selected year in 4 digits
        this.Day = pDate.getDay();
        this.today = new Date();
        this.Format="ddMMyyyy";
        this.WeekChar=1;//number of character for week day. if 2 then Mo,Tu,We. if 3 then Mon,Tue,Wed.
        this.showMonthScroller = false;
        this.align = "center";
        this.showWeek = false;
        this.showLongMonth=true; //Show long month name in Calendar header. example: "January".
        this.background = "white";
        this.sundayColor = LightGrayColor;
        this.saturdayColor = LightGrayColor;
        this.weekDayColor = LightGrayColor;
        this.weekHeadColor = "#cccccc"; //Background Color in Week header.
        this.monthColor="#000066";//color of font of Year selector.
        this.todayColor="#ffcc00";//Background color of today.
        this.dayOfTheWeekColor = "#000000";
        this.weekBarHeight = 12;
        this.fontIsBold = false;
        this.mondayIsFirstDay=true;//true:Use Monday as first day; false:Sunday as first day. [true|false]
        this.textWidth = 105;
        this.textHeight = 100;
    }

    function incYear() {
        this.Year++;
    }
    Calendar.prototype.incYear=incYear;

    function decYear() {
        this.Year--;
    }
    Calendar.prototype.decYear=decYear;

    function incMonth()
    {   
        this.Month++;
        if (this.Month>=12)
        {
            this.Month=0;
            this.incYear();
        }
    }
    Calendar.prototype.incMonth=incMonth;

    function decMonth()
    {   
        this.Month--;
        if (this.Month<0)
        {
            this.Month=11;
            this.decYear();
        }
    }
    Calendar.prototype.decMonth=decMonth;

    function incWeek() {
        this.Date += 7;
        if (this.Date > this.getMonDays()) {
            this.Date -= this.getMonDays();
            this.incMonth();
        }
    }
    Calendar.prototype.incWeek = incWeek;

    function decWeek() {
        this.Date -= 7;
        if (this.Date <= 0) {
            this.decMonth();
            this.Date += this.getMonDays();
        }
    }
    Calendar.prototype.decWeek = decWeek;

    function incDate() {
        if (++this.Date > this.getMonDays()) {
            this.Date = 1;
            this.incMonth();
        }
    }
    Calendar.prototype.incDate = incDate;

    function decDate() {
        if (--this.Date == 0) {
            this.decMonth();
            this.Date = this.getMonDays();
        }
    }
    Calendar.prototype.decDate = decDate;

    function setWeekStart() {
        var day = this.Day;
        if (this.mondayIsFirstDay && this.Day == 0)
            this.Day = 6;
        this.Date = this.Date - this.Day + 1;
        if (this.Date <= 0) {
            this.decMonth();
            this.Date += this.getMonDays();
        }
    }
    Calendar.prototype.setWeekStart = setWeekStart;

    function getMonthName(month)
    {
        var Month=MonthName[month != null ? month : this.Month];
        if (this.showLongMonth)
            return Month;
        else
            return Month.substr(0,3);
    }
    Calendar.prototype.getMonthName=getMonthName;

    function getDayName() {
        return WeekDayName1[this.Day];
    }
    Calendar.prototype.getDayName=getDayName;

    function getMonDays(month) //Get number of days in a month
    {
        var DaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
        if (this.isLeapYear()) {
            DaysInMonth[1]=29;
        }
        return (month != null && month >=0 && month < 12) ? 
            DaysInMonth[month] : DaysInMonth[this.Month];
    }
    Calendar.prototype.getMonDays=getMonDays;
    
    function isLeapYear() {
        return (this.Year%4) == 0 && 
           ((this.Year%100) != 0 || (this.Year%400) == 0);
    }
    Calendar.prototype.isLeapYear=isLeapYear;
    
    function isToday(date) {
        return (date == this.today.getDate()) && 
            (this.Month == this.today.getMonth()) &&
            (this.Year==this.today.getFullYear());
    }
    Calendar.prototype.isToday=isToday;

    function formatDate() {
        return this.Year + "-" + (this.Month+1) + "-" + this.Date;
    }
    Calendar.prototype.formatDate=formatDate;

    function renderMonth() {
        var vCalData;
        var date;
        var weekDay=0;
        var vFirstDay;  
        var contentString = this.getTableHeader("Month") + this.getWeekHeader();

        //Calendar detail
        CalDate=new Date(this.Year,this.Month);
        CalDate.setDate(1);
        vFirstDay=CalDate.getDay();
        if (this.mondayIsFirstDay==true)
        {
            vFirstDay-=1;
            if (vFirstDay==-1)
                vFirstDay=6;
        }

        vCalData="<tr>";
        if (this.showWeek) {
            // if week starts in previous month
            var date = this.Date;
            var month = this.Month;
            var year = this.Year;
            if (vFirstDay > 0) {
                if (--month < 0) {
                    month = 11;
                    year--;
                }
                date = this.getMonDays(month) - vFirstDay + 1;
            }
var currMonth=month+1;
var w = getWeekNumber(year,currMonth,1);
if(date==1) { 
	if(currMonth == 12) { 
	currMonth--;
		w = getWeekNumber(year,currMonth,1) ;
		}
	else
		w = getWeekNumber(year,currMonth,1) - 4;
}
            vCalData += "<td class=\"weekTitle\" align=\"center\">" +
                "<a style=\"color: #404040\" " +
                "href=\"JavaScript:selectWeek(" +
                year + "," + (month+1) + "," + date + ")\">" +
                this.formatWeekString() + "<br>" + w + "</a></td>";
        }
        for (weekDay = 0; weekDay < vFirstDay; weekDay++) {
            vCalData += this.genCell();
        }
        rows = 0;
        d = new Date(this.Year, this.Month, 1);
        for (date = 1; date <= this.getMonDays(); date++) {
            d.setDate(date);
            vCalData += this.dayCell(d);
            if( (++weekDay%7 == 0) && (date < this.getMonDays())) {
                vCalData += "</tr>\n<tr>";
                if (this.showWeek) {
                    vCalData += "<td align=\"center\" class=\"weekTitle\">" +
                        "<a style=\"color: #404040\" href=\"" +
                        "JavaScript:selectWeek(" + this.Year + "," + 
                        (this.Month+1) + "," + (date+1) + ")\">" +
                        this.formatWeekString() + "<br/>" +
                        getWeekNumber((this.Year),(this.Month),(date+1)) + "</td>";
                }
                rows++;
            }
        }
        while (weekDay % 7 != 0) {
            vCalData += this.genCell();
            weekDay++;
        }
        vCalData=vCalData+"</tr>";
        while (rows < 5 && !this.showMonthScroller) {
            vCalData += "</tr>\n<tr><td><big>&#160</big></td></tr>";
            rows++;
        }
        contentString += vCalData;
        contentString += "</table>";
        return contentString;
    }
    Calendar.prototype.renderMonth=renderMonth;

    function renderWeek() {
        var vCalData;
        var date;
        var weekDay;
        var contentString = this.getTableHeader("Week") + this.getWeekHeader();
        vCalData="<tr>";
        if (this.showWeek)
            vCalData += "<td class=\"weekTitle\" align=\"center\">" +
                "&#160;&#160;&#160;</td>";
        year = this.Year;
        month = this.Month;
        date = this.Date;
        d = new Date();
        for (weekDay = 1; weekDay <= 7; weekDay++) {
            d.setYear(year);
            d.setMonth(month);
            d.setDate(date++);
            vCalData += this.dayCell(d);
            if (date > this.getMonDays()) {
               date = 1;
               if (++month > 11) {
                   month = 0;
                   year++;
               }
            }
        }
        contentString += vCalData + "</tr></table>";
        return contentString;
    }
    Calendar.prototype.renderWeek=renderWeek;

    function getTableHeader(name) {
        var vCalHeader = "<table height=\"150\" border=0 cellpadding=0 " +
			"cellspacing=3 width=\"150\" valign=\"top\" >"
        vCalHeader += "<tr height=\"12\"><td colspan=\"8\">" +
        	"<table border=0 width=\"100%\" cellpadding=0 cellspacing=0><tr>";
        if (this.showMonthScroller) {
            vCalHeader += "<td class=\"clNavbarImg\"><img src=\"/site/images/" +
                "titleLeft.gif\" alt=\"\" border=0/></td>";
            vCalHeader += "<td class=\"clLeft headerBg\" align=\"left\"" +
                " style=\"font-size: 12px;\"><a id=\"scr\" class=\"clNone\"" +
                " href=\"JavaScript:prev" + name + "();\"><small>&lt;&lt;&lt;" +
                "</small> " + Strings.PREV + "</a></td>";
            var title = name == "Week" ? this.getWeekTitle() :
                this.getMonthName() + " " + this.Year;
            vCalHeader += "<td class=\"clCenter headerBg\">"+ title + 
                "</td>";
            vCalHeader += "<td class=\"clRight headerBg\" align=\"right\"" +
                " style=\"font-size: 12px;\"><a class=\"clNone\"" +
                " href=\"JavaScript:next" + name + "();\">" + Strings.NEXT +
                " <small> &gt;&gt;&gt;</small></a></td>";
            vCalHeader += "<td class=\"clNavbarImg\"><img src=\"/site/images/" +
                "titleRight.gif\" alt=\"\" border=0/></td>";
        }
        else {
            vCalHeader += "<td class=\"headerMonth\" align=\"center\" width=\"90%\">";
            vCalHeader += "<a style=\"color : " + this.monthColor + 
                "\" href=\"JavaScript:selectMonth(" + this.Year + "," + 
                (this.Month+1) + ");\">";
            vCalHeader += this.getMonthName()+" " + this.Year + "</a></b>" +
                "</td>";
        }
        vCalHeader += "</tr></table></td></tr>"
        return vCalHeader;
    }
    Calendar.prototype.getTableHeader = getTableHeader;

    /* Builds the header of the calendar with the days names */
    function getWeekHeader() {
        var header = "<tr height=\"" + this.weekBarHeight + 
            "\" bgcolor=" + this.weekHeadColor+">";
        if (this.showWeek)
            header += "<td class=\"weekTitle\" width=20></td>";
        var WeekDayName = this.mondayIsFirstDay ? WeekDayName2 : WeekDayName1;
        for (i = 0; i < 7; i++) {
            header += "<td align=\"center\" style=\"padding: 2px;\">" +
               "<font face=\"Helvetica\" size=\"2\" color=\"" + 
               this.dayOfTheWeekColor + "\"><b>" + 
               WeekDayName[i].substr(0,this.WeekChar)+"</b></font></td>";
        }
        header += "</tr>";
        return header;
    }
    Calendar.prototype.getWeekHeader = getWeekHeader;

    function getWeekTitle() {
        var month = this.Month;
        var year = this.Year;
        var title = "";
        if (this.getMonDays() - this.Date < 6) {
            if (++month > 11) {
                month = 0;
                year++;
            }
        }
        if (year != this.Year) {
            title = this.getMonthName() + " " + this.Year + " / " +
                 this.getMonthName(month) + " " + year;
        }
        else if (month != this.Month) {
            title = this.getMonthName() + " / " +
                 this.getMonthName(month) + " " + this.Year;
        }
        else
            title = this.getMonthName() + " " + this.Year;
        return title;
    }
    Calendar.prototype.getWeekTitle = getWeekTitle;

    /* Builds the html-code for one day of the period */
    function dayCell(d) {
        var strCell;
        var date = d.getDate();
        var weekDay = d.getDay();
        if (this.isToday(date)) //Highlight today's date
            strCell=this.genCell(d, true, this.todayColor);
        else {
            if (this.mondayIsFirstDay) {
                if (weekDay%7 == 0)
                    strCell=this.genCell(d, false, this.sundayColor);
                else if ((weekDay+1)%7 == 0)
                    strCell=this.genCell(d, false, this.saturdayColor);
                else
                    strCell=this.genCell(d, null, this.weekDayColor);
            }
            else {
                if (weekDay%7 == 0)
                    strCell=this.genCell(d, false, this.saturdayColor);
                else if ((weekDay+6)%7 == 0)
                    strCell=this.genCell(d, false, this.sundayColor);
                else
                    strCell=this.genCell(d, null, this.weekDayColor);
            }
        }
        return strCell;
    }
    Calendar.prototype.dayCell = dayCell;

    //Generate table cell with value
    function genCell(d, pHighLight, pColor) {
        var date;
        var PCellStr;
        var vColor;
        date = d != null ? d.getDate() : "";
        vColor = pColor != null ? "bgcolor=\""+pColor+"\"" : 
            "bgcolor=\""+this.background+"\"";
        var idStr = "";
        var aStr = "";
        if (this.showWeek && d != null) {
            aStr += "<div style=\"overflow : hidden; height:" + 
                this.textHeight + "px; width:" + this.textWidth + 
                "px\" id=\"day_" + date + "\"></div>";
            idStr = "id=\"cell_" + date + "\"";
        }

        PCellStr = "<td class=\"PCell\" " + idStr + " valign=\"top\" "+vColor+" align= \"" + 
            this.align + "\">";
        if (d != null) {
           var title = date + " " + this.getMonthName(d.getMonth()) + 
              " " + d.getYear();
           if (this.fontIsBold)
              PCellStr += "<b>";
           PCellStr += "<a title=\"" + title + "\"" +
              "href=\"JavaScript:selectDate(" + d.getYear() + "," + 
              (d.getMonth()+1) + "," + date + ")\">"+date+"</a>";
            if (this.fontIsBold)
              PCellStr += "</b>";
        }
        PCellStr += "<span class=\"daytime\">" + aStr + "</span></td>";
        return PCellStr;
    }
    Calendar.prototype.genCell=genCell;

    function formatWeekString() {
        var s = "";
        for (i = 0; i < Strings.WEEK.length; i++)
            s += Strings.WEEK.charAt(i) + "<br>";
        return s;
    }
    Calendar.prototype.formatWeekString=formatWeekString;

    function getDate(dateStr) {
        if(/^(\d{1,4})\-(\d{1,2})\-(\d{1,2})$/.test(dateStr)){
            year=parseInt(RegExp.$1,10);
            if(year<100) year=(year<70)?2000+year:1900+year;
            month=RegExp.$2-1;
            date=parseInt(RegExp.$3,10);
            d1=new Date(year, month, date);
            return d1;
        }
    }
    
function loadCalendar(path,idNumber,dateType,dateTime)
{
	var arguments = new Object ();
	arguments.calParam=[idNumber,dateType,window,dateTime]; //dateTime specify as FALSE (without viewing time) or TRUE (viewing time)
	var cnTop="200";// vertical coord
	var cnLeft="500";// horizontal coord
	//winCal=window.showModalDialog("dialog_calendar_picker.html",arguments,"dialogHeight: 275px; dialogWidth: 220px; dialogTop:" +cnTop+ "px; DialogLeft:" +cnLeft+"px; edge: raised; center: no; help: no; resizable: no; scroll: no; status: no;");
	winCal=window.showModalDialog(path,arguments,"dialogHeight: 301px; dialogWidth: 220px; dialogTop:" +cnTop+ "px; DialogLeft:" +cnLeft+"px; edge: raised; center: no; help: no; resizable: no; scroll: no; status: no;");
}

        
        function onSubmit() {       

		if (categoriesForm.searchStartDate.value != "" && !StringUtil.validateDate(categoriesForm.searchStartDate.value))
		{
		    alert(s_InvalidEventDate);
		    return;
		}
		if (categoriesForm.searchEndDate.value != "" && !StringUtil.validateDate(categoriesForm.searchEndDate.value))
		{
		    alert(s_InvalidEventDate);
		    return;
		}

                categoriesForm.searchCategoryId.value = categoriesForm.category.value;
                if (categoriesForm.searchCategoryId.value == "any")
                    categoriesForm.searchCategoryId.value = 0;
                    
		categoriesForm.submit();
	}
	
function getWeekNumber(year,month,day){
    //lets calc weeknumber the cruel and hard way :D
    //Find JulianDay 
    month += 1; //use 1-12
    var a = Math.floor((14-(month))/12);
    var y = year+4800-a;
    var m = (month)+(12*a)-3;
    var jd = day + Math.floor(((153*m)+2)/5) + 
                 (365*y) + Math.floor(y/4) - Math.floor(y/100) + 
                 Math.floor(y/400) - 32045;      // (gregorian calendar)
    //var jd = (day+1)+Math.Round(((153*m)+2)/5)+(365+y) + 
    //                 Math.round(y/4)-32083;    // (julian calendar)
    
    //now calc weeknumber according to JD
    var d4 = (jd+31741-(jd%7))%146097%36524%1461;
    var L = Math.floor(d4/1460);
    var d1 = ((d4-L)%365)+L;
    NumberOfWeek = Math.floor(d1/7) + 1;
    return NumberOfWeek;
    }