var ctrlName;
function CreateCalendar(controlId)
{
    ctrlName = controlId;
    if(document.getElementById(ctrlName))
    {
        var newDateControl = new DateControl();
        return newDateControl;
    }
    else
    {
        return;
    }
}

function DateControl()
{
    this.id = ctrlName.toString();
    this.currentDate = new Date(),
    this.renderedMonth,
    this.renderedYear,
    this.selectedDate,
    this.clientParameters,
    this.maximumDate,
    this.minimumDate,
    this.allowableMaxDate,
    this.allowableMinDate,
    this.monthNames,
    //*SK* CR#24576-100
    this.fullMonthNames,
    //*SK* End
    this.dayNames,
    this.textBoxId;
    this.imageId;
    this.serversideSelectedDateId;
    this.visibleDate;
    this.selectedDateText,
    this.todayText,
    this.closeText,
    this.calendarClass,
    this.linkItemClass,
    this.canShowCalendar = false,
    this.frameOverDiv;
    this.todayStyle = "Today",
    this.selectedDateStyle = "SelectedDate",
    this.navigationHeaderClass,
    this.dayHeaderClass,
    this.dateRowClass,
    this.alternativeDateRowClass,
    this.footerClass,
    //*SK* CR#24576-100
    this.monthsToDisplayInEachPage,
    //this.calendarType,
    this.calendarNavigationType,
    this.calendarHeading,
    //*SK* End
    this.Init();
}

DateControl.prototype.Init = function()
{
    this.HideCalendar();
    this.ResetValues();
    this.clientParameters = eval(this.id + "Parameters");
    this.monthNames = eval(this.clientParameters.monthNames);
    //*SK* CR#24576-100
    this.fullMonthNames = eval(this.clientParameters.fullMonthNames);
    //*SK* End
    this.dayNames = eval(this.clientParameters.dayNames);
    this.textBoxId = document.getElementById(this.clientParameters.textBoxId);
    this.imageId = document.getElementById(this.clientParameters.imageId);
    this.serversideSelectedDateId = document.getElementById(this.clientParameters.serversideSelectedDate);
    this.visibleDate = (this.textBoxId.value) ? this.ParseDate(this.textBoxId.value) : '';
    this.selectedDate = (this.clientParameters.selectedDate) ? this.ParseDate(this.clientParameters.selectedDate): '';
    this.maximumDate = (this.clientParameters.allowableMaxDate) ? this.ParseDate(this.clientParameters.allowableMaxDate): this.maximumDate;
    this.minimumDate = (this.clientParameters.allowableMinDate) ? this.ParseDate(this.clientParameters.allowableMinDate): this.minimumDate;
//    this.maximumDate = (this.clientParameters.calendarMaximumDate)? this.ParseDate(this.clientParameters.calendarMaximumDate): new Date(9999,12,31);
//    this.minimumDate = (this.clientParameters.calendarMinimumDate) ? this.ParseDate(this.clientParameters.calendarMinimumDate): new Date(0001,1,1);
    this.allowableMaxDate = (this.clientParameters.allowableMaxDate) ? this.ParseDate(this.clientParameters.allowableMaxDate): this.maximumDate;
    this.allowableMinDate = (this.clientParameters.allowableMinDate) ? this.ParseDate(this.clientParameters.allowableMinDate): this.minimumDate;
    this.selectedDate = (this.visibleDate && this.selectedDate != this.visibleDate) ? this.visibleDate : this.selectedDate;
    this.renderedMonth = (this.selectedDate) ? this.selectedDate.getMonth() : this.currentDate.getMonth();
    this.renderedYear = (this.selectedDate) ? this.selectedDate.getFullYear() : this.currentDate.getFullYear();
    this.selectedDateText = (this.clientParameters.selectedDateText) ? this.clientParameters.selectedDateText : "Selected Date";
    this.todayText = (this.clientParameters.todayText) ? this.clientParameters.todayText : "Today";
    this.closeText = (this.clientParameters.closeText) ? this.clientParameters.closeText : "Close";
    this.calendarClass = ((this.clientParameters.calendarClass) ? ("'" + this.clientParameters.calendarClass + "'") : "'table_border'") ;
    this.textBoxId.value = this.FormatDate(this.selectedDate.getFullYear(),this.selectedDate.getMonth(),this.selectedDate.getDate());
    this.navigationHeaderClass = ((this.clientParameters.navigationHeaderClass) ? ("'" + this.clientParameters.navigationHeaderClass + "'") : "'calendar_table_header_bg'") ;
    this.dayHeaderClass = ((this.clientParameters.dayHeaderClass) ? ("'" + this.clientParameters.dayHeaderClass + "'") : "'cal_navigation_header'") ;
    this.dateRowClass = ((this.clientParameters.dateRowClass) ? ("'" + this.clientParameters.dateRowClass + "'") : "'table_first_bg_bold'") ;
    this.alternativeDateRowClass = ((this.clientParameters.alternativeDateRowClass) ? ("'" + this.clientParameters.alternativeDateRowClass + "'") : "'table_second_bg_bold'") ;
    this.footerClass = ((this.clientParameters.footerClass) ? ("'" + this.clientParameters.footerClass + "'") : "'top_band_bottombg'") ;
     //*SK* CR#24576-100
    this.monthsToDisplayInEachPage = this.clientParameters.numberOfMonthsToDisplay;
    //this.calendarType = this.clientParameters.calendarType;
    this.calendarNavigationType = this.clientParameters.calendarNavigationType;
    this.calendarHeading = this.clientParameters.calendarHeading;
    //*SK* End
    this.serversideSelectedDateId.value = this.textBoxId.value;
}

DateControl.prototype.ShowCalendar = function()
{
    if(document.getElementById(this.id + "_minValue"))
    {
        var hiddenControl = document.getElementById(this.id + "_minValue");
        eval(hiddenControl.value);
        this.minimumDate = this.allowableMinDate = this.ParseDate(modifiedValues[0]);
        this.maximumDate = this.allowableMaxDate = this.ParseDate(modifiedValues[1]);
    }

    this.HideCalendar();
    var calendarControl = document.getElementById(this.id + "_cal");
    if(!calendarControl)
    {
        this.Calendar = document.createElement('div');
        with(this.Calendar)
        {
            id= this.id +"_cal";
            var calendarWidth = this.textBoxId.offsetWidth + 35;
//            if(this.IsIEWin())
//            {
//                style.width = calendarWidth + "px";
//            }
            style.position = "absolute";
            style.zIndex = "1000";
            style.visibility = "hidden";
            style.backgroundColor = "White";
        }
        this.Calendar.onclick = this.CalendarClick;
        document.body.appendChild(this.Calendar);
    }
    else
    {
        this.Calendar = calendarControl;
    }
    this.RenderCalendar();
    
    this.RenderCalendarPositions();

    this.Calendar.style.visibility = "visible";
    document.onclick = this.DocumentClick;
    document.onkeydown = this.DocumentKeyPress;
}

//*SK* CR#24576-100
DateControl.prototype.RenderCalendarPositions = function()
{
    var imagePosition = this.FindPosition(this.imageId);
   
    var calLeft = parseInt(imagePosition[0]) + parseInt(this.imageId.offsetWidth) ;
    var calTop = parseInt(imagePosition[1]);
    if((calLeft + this.Calendar.offsetWidth) > document.body.clientWidth)
    {
       calLeft =  document.body.clientWidth - this.Calendar.offsetWidth;
       calTop = calTop + parseInt(this.imageId.offsetHeight);
    }
    
    this.Calendar.style.left = calLeft +  "px";
    this.Calendar.style.top = calTop + "px";

    this.frameOverDiv = this.ShowFrame(this.frameOverDiv,this.Calendar);
}
//*SK* End

 //*SK* CR#24576-100
DateControl.prototype.RenderCalendar = function()
{
    var renderedMonth = parseInt(this.renderedMonth);
    var renderedYear = parseInt(this.renderedYear);
    var curRenderedMonth = parseInt(this.renderedMonth);
    var curRenderedYear = parseInt(this.renderedYear);
    var tdColSpan;
    var roundValue;
    var actualValue;
    var headColSpan;
    var displayDate;
    var renderCalendarText;
    
    renderCalendarText = "<table width=100% border=0 cellpadding=0 cellspacing=0 class=" + this.calendarClass +">";
   
//    if(this.calendarType != 'Single')
//    {
        tdColSpan = parseInt(this.monthsToDisplayInEachPage) + parseInt(this.monthsToDisplayInEachPage);
    
        renderCalendarText += "<tr><td colspan=" + tdColSpan + " ><table cellpadding=0 cellspacing=0 width=100% ><tr>";
       
        
        renderCalendarText += "<td width=25% class=" + this.navigationHeaderClass + " align=left >&nbsp;";
        if(this.calendarNavigationType == 'YearMonthNames')
        {
            displayDate = new Date(this.renderedYear - 1,this.renderedMonth,1);
            if(displayDate > this.minimumDate)
            {
                renderCalendarText += "<span onmouseover=\"this.style.cursor='pointer'\" onclick=\"dateControl.PreviousYear();dateControl.RenderCalendar();\" ><u>" + (this.renderedYear - 1) + "</u></span>";
            }
        }
        else
        {
            displayDate = new Date(this.renderedYear - 1,this.renderedMonth,this.selectedDate.getDate());
            if(displayDate > this.minimumDate)
            {                        
                renderCalendarText += "<img src=\"" + this.clientParameters.PrevYearImage + "\" alt=\"" + this.clientParameters.AltTextForPrevYearImage + "\" onclick=\"dateControl.PreviousYear();dateControl.RenderCalendar();\">";
            }
            displayDate = new Date(this.renderedYear,this.renderedMonth,this.selectedDate.getDate());
            if(displayDate > this.minimumDate)
            {
                renderCalendarText += "<img src=\"" + this.clientParameters.PrevMonthImage + "\" alt=\"" + this.clientParameters.AltTextForPrevMonthImage + "\" onclick=\"dateControl.PreviousMonth();dateControl.RenderCalendar();\">";
            }
        }
            
        renderCalendarText += "</td><td width=50% class=" + this.navigationHeaderClass + " align=center >" + this.calendarHeading + "</td><td width=25% class=" + this.navigationHeaderClass + " align=right >&nbsp;";
        
        if(this.calendarNavigationType == 'YearMonthNames')
        {
            displayDate = new Date(this.renderedYear + 1,this.renderedMonth,this.GetDaysInMonth(this.renderedMonth,this.renderedYear + 1));
            if(displayDate < this.maximumDate)
            {
                renderCalendarText += "<span onmouseover=\"this.style.cursor='pointer'\" onclick=\"dateControl.NextYear();dateControl.RenderCalendar();\" ><u>" + (this.renderedYear + 1) + "</u></span>&nbsp;";
            }
        }
        else
        {
            var curMonth = this.renderedMonth + parseInt(this.monthsToDisplayInEachPage) - 1;
            var curYear = this.renderedYear;
            if(curMonth > 11)
            {
                curMonth = 0;
                curYear = curYear + 1;
            }
            displayDate = new Date( curYear, curMonth, this.selectedDate.getDate());            
            if(displayDate < this.maximumDate)
            {
                renderCalendarText += "<img src=\"" + this.clientParameters.NextMonthImage + "\" alt=\"" + this.clientParameters.AltTextForNextMonthImage + "\" onclick=\"dateControl.NextMonth();dateControl.RenderCalendar();\">";
            }
            displayDate = new Date(this.renderedYear + 1,this.renderedMonth,this.selectedDate.getDate());            
            if(displayDate < this.maximumDate)
            {
                renderCalendarText += "<img src=\"" + this.clientParameters.NextYearImage + "\" alt=\"" + this.clientParameters.AltTextForNextYearImage + "\" onclick=\"dateControl.NextYear();dateControl.RenderCalendar();\">";
            }
        }
        renderCalendarText += "</td></tr></table></td></tr><tr>";
        
        for(var counter = 1; counter <= parseInt(this.monthsToDisplayInEachPage); counter++)
        {
            if(counter == 1)
            {
                renderCalendarText += "<td></td>";
            }
            renderCalendarText += "<td  valign=top>";
            renderCalendarText += this.CreateCalendar();
            renderCalendarText += "</td>";
            if(counter != parseInt(this.monthsToDisplayInEachPage) && parseInt(this.monthsToDisplayInEachPage) > 1)
            {
                renderCalendarText += "<td valign=top style='width=1px;'class=" + this.navigationHeaderClass + " >&nbsp;</td>";
            }
            else
            {
                renderCalendarText += "<td></td>";
            }
                    
            this.renderedMonth = this.renderedMonth + 1;
            if(this.renderedMonth > 11)
            {
                this.renderedMonth = 0;
                this.renderedYear = this.renderedYear + 1;
            }
            displayDate = new Date(this.renderedYear,this.renderedMonth,1);
            if(displayDate > this.maximumDate)
            {
                break;
            }
        }
        
        renderCalendarText += "</tr>";
        
        //Rendering the Previous and Next Month Names
        if(this.calendarNavigationType == 'YearMonthNames')
        {
            renderCalendarText += "<tr><td colspan=" + tdColSpan + " ><table cellpadding=0 cellspacing=0 width=100% ><tr><td class=" + this.navigationHeaderClass + " align=left >";
            if((curRenderedMonth - 1) < 0)
            {
                curRenderedMonth = 12;
                curRenderedYear = curRenderedYear - 1;
            }
            displayDate = new Date(curRenderedYear,curRenderedMonth,0);
            if(displayDate > this.minimumDate)
            {
                renderCalendarText += "&nbsp;&nbsp;<span onmouseover=\"this.style.cursor='pointer'\" onclick=\"dateControl.PreviousMonth();dateControl.RenderCalendar();\" ><u>" + this.fullMonthNames[(curRenderedMonth - 1)] + "</u></span>";
            }
            displayDate = new Date(this.renderedYear,this.renderedMonth,0);
            renderCalendarText += "</td><td class=" + this.navigationHeaderClass + " align=right colspan=" + (tdColSpan -2) + " >";
            if(displayDate < this.maximumDate)
            {
                renderCalendarText += "<span onmouseover=\"this.style.cursor='pointer'\" onclick=\"dateControl.NextMonth();dateControl.RenderCalendar();\" ><u>" + this.fullMonthNames[(this.renderedMonth)] + "</u></span>&nbsp;&nbsp;";
            }
            renderCalendarText += "</td></tr></table></td></tr>";
        }
        renderCalendarText += "<tr class="+ this.footerClass + "><td align=center colspan=" + (tdColSpan + 1)+ "><a "+ this.GetLinkStyle(this.selectedDateStyle)  +" onclick='dateControl.DisplaySelectedDate()'>" + this.selectedDateText + "</a> &nbsp; | &nbsp;";
        renderCalendarText += "<a " + this.GetLinkStyle(this.todayStyle) +" onclick='dateControl.DisplayToday()'>" + this.todayText +"</a> &nbsp; | &nbsp;";
        renderCalendarText += "<a " + this.GetLinkStyle() +" onclick='dateControl.CloseCalendar()'>" + this.closeText +"</a></td></tr>";
        renderCalendarText += "</table>";
        this.renderedMonth = renderedMonth;
        this.renderedYear = renderedYear;
//    }
//    else
//    {
//        renderCalendarText += "<tr><td valign=top>";
//        renderCalendarText += this.CreateCalendar();
//        renderCalendarText += "</td></tr></table>";
//    }
    this.Calendar.innerHTML = renderCalendarText;

    if(this.IsIEWin())
    {
        this.Calendar.style.width = this.textBoxId.offsetWidth + 35 + "px";
    }
    else if(this.IsFireFox())
    {   
        var ONE_MONTH = 1000 * 60 * 60 * 24 * 30;
        
        var currDate = new Date(this.renderedYear, this.renderedMonth, 1);
        
        var date1_ms = currDate.getTime();
        var date2_ms = this.maximumDate.getTime();

        // Calculate the difference in milliseconds
        var difference_ms = Math.abs(date1_ms - date2_ms);
        var noOfMonths = Math.round(difference_ms/ONE_MONTH);
        
        if(noOfMonths >= this.monthsToDisplayInEachPage)
        {
            this.Calendar.style.width = this.monthsToDisplayInEachPage * 20 + "%";
        }
        else
        {
            if(noOfMonths == 0)
            {
                noOfMonths = 1;
            }
            this.Calendar.style.width = noOfMonths * 20 + "%";
        }
    }
    this.RenderCalendarPositions();
    
}
//*SK* End

DateControl.prototype.ShowFrame = function(frameName, divName)
{
    if(this.IsIEWin() || this.IsFireFox())
    {
        if(!frameName)
        {
            frameName = document.createElement('IFRAME');
            with(frameName)
            {
                id = this.id +"_frame";
                src = "javascript:false;";
                style.position = "absolute";
                style.visibility = "hidden";
                style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
            }
            document.body.appendChild(frameName);
        }
        with(frameName)
        {
            style.width = divName.offsetWidth -5 + "px";
            style.height = divName.offsetHeight - 5 + "px";
            style.top = divName.style.top;
            style.left = divName.style.left;
            style.zIndex = divName.style.zIndex - 1;
            style.visibility = "visible";
        }
    }
    return frameName;
};

DateControl.prototype.IsIEWin = function()
{
    var agent = navigator.userAgent.toLowerCase();
    var isIEMac = (agent.indexOf("mac") != -1);
    var isIE = (agent.indexOf("ie") != -1);
    var isIEWin = (isIE && !isIEMac);
    return isIEWin;
}

DateControl.prototype.IsFireFox = function()
{
    var agent = navigator.userAgent.toLowerCase();
    var isFireFox = (agent.indexOf("firefox") != -1);
    return isFireFox;
}

DateControl.prototype.HideFrame = function()
{
    if(this.IsIEWin() || this.IsFireFox())
    {
        var definedFrameControls = document.getElementsByTagName('IFRAME');
        for(counter=0;counter<definedFrameControls.length;counter++)
        {
            var frameTagId = definedFrameControls[counter].id;
            if(frameTagId.indexOf("_frame") != -1)
            {
                frameTagId = document.getElementById(frameTagId);
                frameTagId.style.visibility = "hidden";
                document.body.removeChild(frameTagId);
            }
        }
    }
    this.frameOverDiv = null;
};

DateControl.prototype.HideCalendar = function()
{
    var definedDivControls = document.getElementsByTagName('div');
    for(counter=0;counter<definedDivControls.length;counter++)
    {
        if(definedDivControls[counter])
        {
            var divTagId = definedDivControls[counter].id;
            if(divTagId.indexOf("_cal") != -1)
            {
                divTagId = document.getElementById(divTagId);
                divTagId.style.visibility = "hidden";
            }
        }
    }
    this.HideFrame();
};

DateControl.prototype.CreateCalendar = function()
{
    var displayDate = new Date(this.renderedYear,this.renderedMonth,1);
    var startDate;
    var endDate;
    // Calculate start date
    if(displayDate <= this.minimumDate)
    {
        startDate = this.minimumDate.getDate();
        this.renderedMonth = this.minimumDate.getMonth();
        this.renderedYear = this.minimumDate.getFullYear();
    }
    else
    {
        startDate = 1;
    }
    // Calculate end date
    if(displayDate >= this.maximumDate)
    {
        endDate = this.maximumDate.getDate();
        this.renderedMonth = this.maximumDate.getMonth();
        this.renderedYear = this.maximumDate.getFullYear();
    }
    else
    {
        endDate = this.GetDaysInMonth(this.renderedMonth,this.renderedYear);
    }
    // End
    var calendarText = "<table width=100% border=0 valign=bottom " ;
    if(this.IsIEWin())
    {
        calendarText += " cellpadding=4 cellspacing=1 ";
    }
    else
    {
        calendarText += " cellpadding=0 cellspacing=1 ";
    }
    calendarText += " style='backgroundColor:White' class=" + this.calendarClass +">";
    calendarText += this.CreateCalendarNavigation(displayDate);
    calendarText += this.CreateCalendarDayHeader();
    
    var column = 0;
    var FirstDayOfMonth = new Date(this.renderedYear,this.renderedMonth,startDate).getDay();
    
    var rowNumber = 0;
    calendarText += "<tr class=" + this.dateRowClass +">";
    if(FirstDayOfMonth > 0 && FirstDayOfMonth < 7)
    {
        for(counter =1; counter <= FirstDayOfMonth; counter++,column++)
        {
            calendarText += this.RenderEmptyCell();
        }   
    }
    
    for(var dayCounter=startDate; dayCounter <= endDate; dayCounter++)
    {
        if(column == 7)
        {
            rowNumber++;
            if(rowNumber % 2 == 0)
            {
                calendarText += "</tr><tr class=" + this.dateRowClass +">";
            }
            else
            {
                calendarText += "</tr><tr class=" + this.alternativeDateRowClass + ">";
            }
            column = 0;
        }
        calendarText += this.RenderDayCell(this.renderedYear,this.renderedMonth, dayCounter);
        column++;
    }
    var LastDayOfMonth = new Date(this.renderedYear,this.renderedMonth,endDate).getDay();
    if(LastDayOfMonth > 0 && LastDayOfMonth < 7)
    {
        for(counter = LastDayOfMonth + 1; counter < 7; counter++)
        {
            calendarText += this.RenderEmptyCell();
        }   
    }
    calendarText += "</tr>"
    for(var index = rowNumber + 1; index < 6; index++)
    {
        calendarText += "<tr class=" + this.dateRowClass + "><td colspan=7>&nbsp;</td></tr>";
    }
    
//    if(this.calendarType == 'Single')
//    {
//        calendarText += "<tr class="+ this.footerClass + "><td colspan=7 align=center><a "+ this.GetLinkStyle(this.selectedDateStyle)  +" onclick='dateControl.DisplaySelectedDate()'>" + this.selectedDateText + "</a> &nbsp; | &nbsp;";
//        calendarText += "<a " + this.GetLinkStyle(this.todayStyle) +" onclick='dateControl.DisplayToday()'>" + this.todayText +"</a> &nbsp; | &nbsp;";
//        calendarText += "<a " + this.GetLinkStyle() +" onclick='dateControl.CloseCalendar()'>" + this.closeText +"</a></td></tr>";
//    }
    calendarText +="</table>";
    return calendarText;
}

DateControl.prototype.GetDaysInMonth = function(int_month,int_year)
{
   if (parseInt(int_month)==11 )
        {
        var new_month = 0
        var new_year_calc =parseInt(int_year)+1 ;
        }
    else if (int_month!=11 )
        {
        var new_month = parseInt(int_month)+1;
        var new_year_calc =parseInt(int_year);
        }
        
    //to gets the number of days in the current month
   
    //UBK CR:32768-321 Start
    //    date1=new Date(int_year,int_month,1);
    //    date2=new Date(new_year_calc,new_month,1);
    //var noOfDays =(date2.valueOf() - date1.valueOf())/86400000;
    
    date1 = adjustForDaylightSaving(new Date(int_year,int_month,1));
    date2 = adjustForDaylightSaving(new Date(new_year_calc,new_month,1));
 
    var noOfDays = days_between(date2,date1);
    //UBK End
    
    return noOfDays;
}

DateControl.prototype.CreateCalendarNavigation = function(renderedDate)
{
    var navigationText = "<tr><td width=98% colspan=7 ><table width=100% cellpadding=0 cellspacing=0 border=0 class=" + this.navigationHeaderClass + "><tr>";
    //*SK* CR#24576-100
//    if(this.calendarType == 'Single')
//    {
//        if(renderedDate > this.minimumDate) 
//        {
//            navigationText += "<td width=5% align=left class=" + this.navigationHeaderClass + " >";
//            navigationText += "<img src=\"" + this.clientParameters.PrevYearImage + "\" alt=\"" + this.clientParameters.AltTextForPrevYearImage + "\" onclick=\"dateControl.PreviousYear();dateControl.RenderCalendar();\">";
//            navigationText += "<img src=\"" + this.clientParameters.PrevMonthImage + "\" alt=\"" + this.clientParameters.AltTextForPrevMonthImage + "\" onclick=\"dateControl.PreviousMonth();dateControl.RenderCalendar();\"></td>";
//        }
//        
//        else
//        {
//            navigationText += "<td width=10%>&nbsp;</td>"
//        }
//    }
    //*SK*
    
    navigationText += "<td colspan=5 width=80% align=center class=" + this.navigationHeaderClass + " >" + this.ShowCalenedarHeading('Full') + "</td>";
    //*SK* CR#24576-100
//    if(this.calendarType == 'Single')
//    {    
//        renderedDate = new Date(this.renderedYear,this.renderedMonth,this.GetDaysInMonth(this.renderedMonth,this.renderedYear));
//        if(renderedDate < this.maximumDate)
//        {
//            navigationText += "<td width=5% align=right class=" + this.navigationHeaderClass + " >";
//            //*PAB* CR: 32768-174
//            navigationText += "<img src=\"" + this.clientParameters.NextMonthImage + "\" alt=\"" + this.clientParameters.AltTextForNextMonthImage + "\" onclick=\"dateControl.NextMonth();dateControl.RenderCalendar();\">";
//            navigationText += "<img src=\"" + this.clientParameters.NextYearImage + "\" alt=\"" + this.clientParameters.AltTextForNextYearImage + "\" onclick=\"dateControl.NextYear();dateControl.RenderCalendar();\">";
//            // End
//            navigationText += "</td>";
//        }
//        else
//        {
//            navigationText += "<td width=10%>&nbsp;</td>"
//        }
//    }
    //*SK* End
    navigationText += "</tr></table></td></tr>";
    return navigationText;
}

DateControl.prototype.CreateCalendarDayHeader = function()
{
    var dayHeader = "<tr class='" + this.dayHeaderClass + "' >";
    for(var dayHeaderCount=0;dayHeaderCount < this.dayNames.length; dayHeaderCount++)
    {
        dayHeader += "<td width=14% align=center>" + this.dayNames[dayHeaderCount] + "</td>"
    }
    dayHeader += "</tr>";
    return dayHeader;
}

DateControl.prototype.ShowCalenedarHeading = function(displayType)
{
    if(displayType == 'Full')
    {
        return this.fullMonthNames[this.renderedMonth] + ",  " + this.renderedYear;
    }
    else
    {
        return this.monthNames[this.renderedMonth] + ",  " + this.renderedYear;
    }
    
}

DateControl.prototype.RenderEmptyCell = function()
{
    return "<td width=14% >&nbsp;</td>";
}

DateControl.prototype.RenderDayCell = function(year,month,date)
{
    var renderingDate = new Date(year,month,date);
    var styleAttrib = '';
    var renderingText = '';

    if(renderingDate >= this.minimumDate && renderingDate <= this.maximumDate)
    {
        if(renderingDate.toString() == this.selectedDate.toString())
        {
            styleAttrib = this.GetLinkStyle(this.selectedDateStyle);
        }
        else if(renderingDate.toDateString() == new Date().toDateString())
        {
            styleAttrib = this.GetLinkStyle(this.todayStyle);
        }
        else
        {
            styleAttrib = this.GetLinkStyle();
        }
        
        renderingText = "<td width=14% align=center>";
        
        if( renderingDate >= this.allowableMinDate && renderingDate <= this.allowableMaxDate)
        {
            renderingText += "<a onclick=\"dateControl.SelectDate(" + this.renderedYear + "," + this.renderedMonth + "," + date + ")\" " + styleAttrib + ">";
            renderingText += date + "</a>";
        }
        else
        {
            renderingText += "<a width=100% style='disabled:disabled;Color:grey;'>" + date +"</a>"
        }
        renderingText += "</td>";
    }
    else
    {
        renderingText += "<td width=14%>&nbsp;</td>";
    }
    return renderingText;
}

DateControl.prototype.PreviousYear = function()
{
    var prevYear = parseInt(this.renderedYear) - 1;
    var prevMonth = parseInt(this.renderedMonth);
    
    this.renderedYear = prevYear;
    this.renderedMonth = prevMonth;
}

DateControl.prototype.PreviousMonth = function()
{
    var prevYear = parseInt(this.renderedYear);
    var prevMonth = parseInt(this.renderedMonth) -1;
    
    if(prevMonth < 0)
    {
        prevMonth = 11;
        prevYear = prevYear -1;
    }
    this.renderedYear = prevYear;
    this.renderedMonth = prevMonth;
}

DateControl.prototype.NextMonth = function()
{
    var nextYear = parseInt(this.renderedYear);
    var nextMonth = parseInt(this.renderedMonth) + 1;
    
    if(nextMonth > 11)
    {
        nextMonth = 0;
        nextYear = nextYear + 1;
    }
    
    this.renderedMonth = nextMonth;
    this.renderedYear = nextYear;
}

DateControl.prototype.NextYear = function()
{
    var nextYear = parseInt(this.renderedYear) + 1;
    var nextMonth = parseInt(this.renderedMonth);
    
    this.renderedMonth = nextMonth;
    this.renderedYear = nextYear;
}

DateControl.prototype.SelectDate = function(year, month, date)
{
    this.renderedYear = year;
    this.renderedMonth = month;
    this.selectedDate = new Date(year,month,date);
    this.textBoxId.value = this.FormatDate(year,month,date);
    if(this.serversideSelectedDateId)
    {
        this.serversideSelectedDateId.value = this.FormatDate(year,month,date);
    }
    this.HideCalendar();
    this.textBoxId.onblur();
}

DateControl.prototype.ParseDate = function(dateString)
{
    if(dateString)
    {
        var formatString = this.clientParameters.DateFormat;
        var strValidString="dMy";
        var strSeparator;
        var datePart;
        var monthPart;
        var yearPart;
        
        for(var i=0;i<formatString.length;i++)
        {
            if(strValidString.indexOf(formatString.charAt(i)) == -1)
                { 
                    strSeparator = formatString.charAt(i);
                    break;
                }
        }        
        var arrFormatString = formatString.split(strSeparator);
        var arrDateString = dateString.split(strSeparator);
            
        for(var arrCounter=0; arrCounter < arrFormatString.length; arrCounter++)
        {
            switch(arrFormatString[arrCounter])
            {
                case 'd': case 'dd':
                {
                    datePart = parseInt(this.RemoveZero(arrDateString[arrCounter]));
                    break;
                }
                case 'M': case 'MM':
                {
                    monthPart = parseInt(this.RemoveZero(arrDateString[arrCounter]-1));
                    break;
                }
                case 'MMM':
                {
                    for(var counter=0; counter<this.monthNames.length; counter++)
                    {
                        var monthName = this.monthNames[counter];
                        if(arrDateString[arrCounter].toLowerCase() == monthName.toLowerCase())
                        {
                            monthPart = counter;
                            break;
                        }
                    }
                    break;
                }
                case 'yyyy': case 'yy':
                {
                    yearPart = parseInt(this.RemoveZero(arrDateString[arrCounter]));
                    if (yearPart<=99){yearPart=yearPart+2000;}
                    break;
                }
                default:
                {
                    alert("Unrecognised date format");
                }
            }
        }
        return new Date(yearPart,monthPart,datePart);
    }
}

DateControl.prototype.RemoveZero = function(value)
{
    if(value.length > 1 && value.substring(0,1) == "0")
        return value.substring(1, value.length);
    else return value;
}

DateControl.prototype.FormatDate = function(year,month,date)
{
    var finalDate = this.clientParameters.DateFormat;
    
    if(finalDate)
    {
        finalDate = finalDate.replace("yyyy",year);
        finalDate = finalDate.replace("yy",this.FormattedText(year % 100));
        finalDate = finalDate.replace("dd",this.FormattedText(date));
        finalDate = finalDate.replace("d",date);
        finalDate = finalDate.replace("MMM","{0}"); // To avoid replacing M in month names
        finalDate = finalDate.replace("MM",this.FormattedText(month +1));
        finalDate = finalDate.replace("M",month+1);
        finalDate = finalDate.replace("{0}",this.monthNames[month]);
        return finalDate;
    }
}

DateControl.prototype.FormattedText = function(value)
{
    if(value)
    {
        return (value < 10) ? "0" + value : value;
    }
}

DateControl.prototype.ResetValues = function()
{
    this.selectedDate = null;
    this.maximumDate = null;
    this.minimumDate = null;
    this.renderedMonth = null;
    this.renderedYear = null;
    this.clientParameters = null;
}

DateControl.prototype.DocumentClick = function()
{
    if(!dateControl.canShowCalendar)
    {
        dateControl.HideCalendar();
    }
    else
    {
        dateControl.canShowCalendar = false;
    }
}

DateControl.prototype.DocumentKeyPress = function(e)
{
    if(!e)
    {
        e = window.event;
    }
    if(e.keyCode == 27)
    {
        dateControl.HideCalendar();
    }
}

DateControl.prototype.DisplayToday = function()
{
    this.visibleDate = (this.textBoxId.value) ? this.ParseDate(this.textBoxId.value) : '';
    this.selectedDate = (this.visibleDate && this.selectedDate != this.visibleDate) ? this.visibleDate : new Date();
    this.renderedMonth = new Date().getMonth();
    this.renderedYear = new Date().getFullYear();
    this.ShowCalendar();
}

DateControl.prototype.DisplaySelectedDate = function()
{
    this.visibleDate = (this.textBoxId.value) ? this.ParseDate(this.textBoxId.value) : '';
    this.selectedDate = (this.visibleDate && this.selectedDate != this.visibleDate) ? this.visibleDate : this.selectedDate;
    this.renderedMonth = this.selectedDate.getMonth();
    this.renderedYear = this.selectedDate.getFullYear();
    this.ShowCalendar();
}

DateControl.prototype.CloseCalendar = function()
{
    this.HideCalendar();
}

DateControl.prototype.GetLinkStyle = function(dayContext)
{
    if(dayContext)
    {
        if(dayContext == this.todayStyle)
        {
            return ((this.clientParameters.todayClass) ? (" class=\'" + this.clientParameters.todayClass + "\'") : "style='cursor: pointer;text-decoration: underline;font-weight:bold;font-style:italic;color:Green'");
        }
        else if(dayContext == this.selectedDateStyle)
        {
            return ((this.clientParameters.selectedDateClass) ? (" class=\'" + this.clientParameters.selectedDateClass + "\'") : "style='cursor: pointer;text-decoration: underline;font-weight:bold;color:Red'");
        }
    }
    else
    {
        return ((this.clientParameters.linkItemClass) ? (" class=\'" + this.clientParameters.linkItemClass + "\'") : "style='cursor: pointer; color: blue; text-decoration: underline;'");
    }
}

DateControl.prototype.CalendarClick = function()
{
    dateControl.canShowCalendar = true;
}

DateControl.prototype.FindPosition = function (controlToFind)
 {
  if( controlToFind.offsetParent )
  {
    for( var posX = 0, posY = 0; controlToFind.offsetParent; controlToFind = controlToFind.offsetParent )
    {
        posX += controlToFind.offsetLeft;
        posY += controlToFind.offsetTop;
    }
    return [ posX, posY ];
  }
  else
  {
    return [ controlToFind.x, controlToFind.y ];
  }
}

DateControl.prototype.GetDateControl = function(controlId)
{
    try
    {
        var currentDateControl;
        if(controlId && document.getElementById(controlId) && controlId != this.id)
        {
            var currentDateControlParameters = (controlId+"Parameters");
            if(eval(currentDateControlParameters))
            {
                currentDateControl= CreateCalendar(controlId);    
            }
        }
        else
        {
            currentDateControl = CreateCalendar(this.id);
        }
    }
    catch(evalException)
    {
        currentDateControl = CreateCalendar(this.id);
    }
    return currentDateControl;
}


DateControl.prototype.GetSelectedDate = function(controlId)
{
    var currentDateControl = this.GetDateControl(controlId);
    return (currentDateControl.selectedDate) ? currentDateControl.selectedDate : '';
}

DateControl.prototype.SetSelectedDate = function(controlId,date)
{
    var currentDateControl = this.GetDateControl(controlId);
    var formattedDate = currentDateControl.FormatDate(date.getFullYear(),date.getMonth(),date.getDate());
    if(formattedDate)
    {
        currentDateControl.selectedDate = currentDateControl.textBoxId.value = currentDateControl.serversideSelectedDateId.value = formattedDate;
    }
}

DateControl.prototype.GetMaximumDate = function(controlId)
{
    var currentDateControl = this.GetDateControl(controlId);
    return (currentDateControl.maximumDate) ? currentDateControl.maximumDate : '';
}