﻿Type.registerNamespace("WINIT.AJAXControls");

WINIT.AJAXControls.EventsCalendar = function(element)
{
    WINIT.AJAXControls.EventsCalendar.initializeBase(this, [element]);
    this._displayMode = null;
    this._displayDate = null;
    this._displayYear = null;
    this._displayMonth = null;
    this._miniCalendar = null;
    
    this._dataSource = null;
    
    // Calendar Delegates
	this._nextMonthDelegate = null;
	this._previousMonthDelegate = null;
	this._dateSelectedDelegate = null;
	this._nextDateDelegate = null;
	this._previousDateDelegate = null;
	this._monthSelectedDelegate = null;
	this._nextYearDelegate = null;
	this._previousYearDelegate = null;
	this._nextWeekDelegate = null;
	this._previousWeekDelegate = null;
	this._addEventDelegate = null;
	this._editEventDelegate = null;
	this._downloadEventDelegate = null;
	this._downloadEventToGoogleDelegate = null;

	this._viewEventDelegate = null;
	this._deleteEventDelegate = null;
	this._dayStartTime = 420;
	this._dayEndTime = 1140;
}

WINIT.AJAXControls.EventsCalendar.prototype = 
{
    initialize: function(){
        WINIT.AJAXControls.EventsCalendar.callBaseMethod(this, 'initialize');
        
        // Creating an Mini Calendar delegate makes sure that the event handler
		// will be executed in the same context of this class        
        if (this._nextMonthDelegate == null) {
            this._nextMonthDelegate = Function.createDelegate(this, this._nextMonthHandler);
        }
        
        if (this._previousMonthDelegate == null) {
            this._previousMonthDelegate = Function.createDelegate(this, this._previousMonthHandler);
        }
        
        if (this._dateSelectedDelegate == null) {
            this._dateSelectedDelegate = Function.createDelegate(this, this._dateSelectedHandler);
        }
        
        if (this._nextDateDelegate == null) {
            this._nextDateDelegate = Function.createDelegate(this, this._nextDateHandler);
        }
        
        if (this._previousDateDelegate == null) {
            this._previousDateDelegate = Function.createDelegate(this, this._previousDateHandler);
        }
        
        if (this._monthSelectedDelegate == null) {
            this._monthSelectedDelegate = Function.createDelegate(this, this._monthSelectedHandler);
        }
        
        if (this._nextYearDelegate == null) {
            this._nextYearDelegate = Function.createDelegate(this, this._nextYearHandler);
        }
        
        if (this._previousYearDelegate == null) {
            this._previousYearDelegate = Function.createDelegate(this, this._previousYearHandler);
        }
        
        if (this._nextWeekDelegate == null) {
            this._nextWeekDelegate = Function.createDelegate(this, this._nextWeekHandler);
        }
        
        if (this._previousWeekDelegate == null) {
            this._previousWeekDelegate = Function.createDelegate(this, this._previousWeekHandler);
        }
        
        if (this._addEventDelegate == null) {
            this._addEventDelegate = Function.createDelegate(this, this._addEventHandler);
        }
        
        if (this._editEventDelegate == null) {
            this._editEventDelegate = Function.createDelegate(this, this._editEventHandler);
        }
        
        if (this._viewEventDelegate == null) {
            this._viewEventDelegate = Function.createDelegate(this, this._viewEventHandler);
        }
        
        if (this._deleteEventDelegate == null) {
            this._deleteEventDelegate = Function.createDelegate(this, this._deleteEventHandler);
        }
        
        if (this._downloadEventDelegate == null) {
            this._downloadEventDelegate = Function.createDelegate(this, this._downloadEventHandler);
        }
        
        if (this._downloadEventToGoogleDelegate == null) {
            this._downloadEventToGoogleDelegate = Function.createDelegate(this, this._downloadEventToGoogleHandler);
        }
    }, 
    
    dispose: function(){
        WINIT.AJAXControls.EventsCalendar.callBaseMethod(this, 'dispose');
    }, 
    
    test: function(){
        alert("hi");
    }, 
    
    // #Start Define Properties
    get_dataSource: function(){
        return this._dataSource;
    }, 
    
    set_dataSource: function(value){
        this._dataSource = value;
    },
    
    get_dayStartTime: function(){
        return this._dayStartTime;
    }, 
    
    set_dayStartTime: function(value){
        this._dayStartTime = value;
    },
    
    get_dayEndTime: function(){
        return this._dayEndTime;
    }, 
    
    set_dayEndTime: function(value){
        this._dayEndTime = value;
    },
    
    get_displayDate: function(){
        return this._displayDate;
    }, 
    
    set_displayDate: function(value){
        this._displayDate = value;
    }, 
    
    get_displayMonth: function(){
        return this._displayMonth;
    }, 
    
    set_displayMonth: function(value){
        this._displayMonth = value;
    }, 
    
    get_displayYear: function(){
        return this._displayYear;
    }, 
    
    set_displayYear: function(value){
        this._displayYear = value;
    },
    
    get_miniCalendar: function(){
        return this._miniCalendar;
    }, 
    
    set_miniCalendar: function(value){
        this._miniCalendar = value;
    },
    
    get_displayMode: function(){return this._displayMode;}, 
    set_displayMode: function(value){this._displayMode = value;}, 
    
    //#End Define Properties
    
    // # Define Events
    // Exposing an event is made up of two steps:
    //  1- Define an Add function to attach a handler to an event 
    //     and add it to the EventHandlerList
    //  2- Define a Remove function to remove a handler from an event
        
    add_nextMonth: function(handler) {
        this.get_events().addHandler('nextMonth', handler);
    },
    remove_nextMonth: function(handler) {
        this.get_events().removeHandler('nextMonth', handler);
    },

    add_previousMonth: function(handler) {
        this.get_events().addHandler('previousMonth', handler);
    },
    remove_previousMonth: function(handler) {
        this.get_events().removeHandler('previousMonth', handler);
    },
    
    add_dateSelected: function(handler) {
        this.get_events().addHandler('dateSelected', handler);
    },
    remove_dateSelected: function(handler) {
        this.get_events().removeHandler('dateSelected', handler);
    },
    
    add_nextDate: function(handler) {
        this.get_events().addHandler('nextDate', handler);
    },
    remove_nextDate: function(handler) {
        this.get_events().removeHandler('nextDate', handler);
    },

    add_previousDate: function(handler) {
        this.get_events().addHandler('previousDate', handler);
    },
    remove_previousDate: function(handler) {
        this.get_events().removeHandler('previousDate', handler);
    },
    
    add_monthSelected: function(handler) {
        this.get_events().addHandler('monthSelected', handler);
    },
    remove_monthSelected: function(handler) {
        this.get_events().removeHandler('monthSelected', handler);
    },
    
    add_nextYear: function(handler) {
        this.get_events().addHandler('nextYear', handler);
    },
    remove_nextYear: function(handler) {
        this.get_events().removeHandler('nextYear', handler);
    },

    add_previousYear: function(handler) {
        this.get_events().addHandler('previousYear', handler);
    },
    remove_previousYear: function(handler) {
        this.get_events().removeHandler('previousYear', handler);
    },


    add_nextWeek: function(handler) {
        this.get_events().addHandler('nextWeek', handler);
    },
    remove_nextWeek: function(handler) {
        this.get_events().removeHandler('nextWeek', handler);
    },

    add_previousWeek: function(handler) {
        this.get_events().addHandler('previousWeek', handler);
    },
    remove_previousWeek: function(handler) {
        this.get_events().removeHandler('previousWeek', handler);
    },
    
    add_addEvent: function(handler) {
        this.get_events().addHandler('addEvent', handler);
    },
    remove_addEvent: function(handler) {
        this.get_events().removeHandler('addEvent', handler);
    },

    add_editEvent: function(handler) {
        this.get_events().addHandler('editEvent', handler);
    },
    remove_editEvent: function(handler) {
        this.get_events().removeHandler('editEvent', handler);
    },
    
    add_viewEvent: function(handler) {
        this.get_events().addHandler('viewEvent', handler);
    },
    remove_viewEvent: function(handler) {
        this.get_events().removeHandler('viewEvent', handler);
    },
    
    add_deleteEvent: function(handler) {
        this.get_events().addHandler('deleteEvent', handler);
    },
    remove_deleteEvent: function(handler) {
        this.get_events().removeHandler('deleteEvent', handler);
    },
    
    add_downloadEvent: function(handler) {
        this.get_events().addHandler('downloadEvent', handler);
    },
    remove_downloadEvent: function(handler) {
        this.get_events().removeHandler('downloadEvent', handler);
    },
    
    add_downloadEventToGoogle: function(handler) {
        this.get_events().addHandler('downloadEventToGoogle', handler);
    },
    remove_downloadEventToGoogle: function(handler) {
        this.get_events().removeHandler('downloadEventToGoogle', handler);
    },
    
    // Define the event handler helper method that will be called
    // internally. This method simply retrieves the attached function 
    // handler on the Delete event, if not null, it fires it on the host page.    
    _nextMonthHandler: function(event, args) {
        // Retrieve the handler assigned to the delete event
        var h = this.get_events().getHandler('nextMonth');
        
        // If there is any method attached
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _previousMonthHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('previousMonth');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _dateSelectedHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('dateSelected');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
     _nextDateHandler: function(event, args) {
        // Retrieve the handler assigned to the delete event
        var h = this.get_events().getHandler('nextDate');
       
        // If there is any method attached
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _previousDateHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('previousDate');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _monthSelectedHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('monthSelected');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
     _nextYearHandler: function(event, args) {
        // Retrieve the handler assigned to the delete event
        var h = this.get_events().getHandler('nextYear');
       
        // If there is any method attached
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _previousYearHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('previousYear');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _nextWeekHandler: function(event, args) {
        // Retrieve the handler assigned to the delete event
        var h = this.get_events().getHandler('nextWeek');
      
        // If there is any method attached
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _previousWeekHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('previousWeek');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _addEventHandler: function(event, args) {
        // Retrieve the handler assigned to the delete event
        var h = this.get_events().getHandler('addEvent');
       
        // If there is any method attached
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    _editEventHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('editEvent');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
     _viewEventHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('viewEvent');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
     _deleteEventHandler: function(event, args) {
        // Retrieve the handler assigned to the delete event
        var h = this.get_events().getHandler('deleteEvent');
        
        // If there is any method attached to the delete
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
     _downloadEventHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('downloadEvent');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
     _downloadEventToGoogleHandler: function(event, args) {
        // Retrieve the handler assigned to the edit event
        var h = this.get_events().getHandler('downloadEventToGoogle');
        
        // If there is any method attached to the edit
        // event handler, fire it.
        if (h) 
            h(this, args);
    },
    
    
    // # End Define Events
    
    getNo_Of_Days: function()
    {
	    var noDays = noDaysArray[this.get_displayMonth()-1];
	    if (this.get_displayMonth() == 2){
		    if((this.get_displayYear() % 4 == 0 && this.get_displayYear() % 100 != 0) || this.get_displayYear() % 400 == 0){
		    noDays = 29;
		    }
		    }
	    return noDays;	
    },
    
    getFirstDayofWeek: function()
    { 

	    var DateOfMonth;
	    var tempDate = this.get_displayDate();	   
	    DateOfMonth = new Date(this.get_displayMonth() + "/" + tempDate+ "/" + this.get_displayYear());	   	   
	    tempDate = tempDate - DateOfMonth.getDay();   		
	  		
	    return tempDate;
    },

    renderCalendar: function()
    {
        var element = this.get_element();
        
        element.innerHTML = "";
        
       switch(this.get_displayMode())
        {
            case displayMode[0]:
                    var curDate = new Date();
                    this.set_displayDate(curDate.getDate());
                    this.set_displayMonth(curDate.getMonth() + 1);
                    this.set_displayYear(curDate.getFullYear());
                    this.displayDayView();
                    break;
            case displayMode[1]:
                    this.displayDayView();
                    break;
            case displayMode[2]:
                    this.displayWeekView();
                    break;
            case displayMode[3]:
                    this.displayMonthView();
                    break;
            case displayMode[4]:
                    this.displayYearView();
                    break;
        }
        
        
        if(this.get_miniCalendar() != null)
        {
            this.renderMiniCalendar(this.get_displayMonth(), this.get_displayYear(), true);
        }
        
    },
    
    renderMiniCalendar: function(month, year, bolOnclick)
    {
        var miniCalendar = this.get_miniCalendar();
        
        miniCalendar.innerHTML = "";
        
        var firstOfMonth = new Date(month + "/1/" + year);
	
	    var day = - firstOfMonth.getDay();												
	    var todaysDate = new Date();
    	

	    // determine number of days in month
	    var noDays = noDaysArray[month - 1];
	    if (month == 2){
		    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
		    noDays = 29;
		    }
		    }


	    var tblMain = document.createElement('TABLE');
	    miniCalendar.appendChild(tblMain);	
	    tblMain.cellPadding ="0";
	    tblMain.cellSpacing ="0";
	    tblMain.className = "tablecal";

	    var tbodyMain = document.createElement('TBODY');
    	
    	
	    // Header Row
    	
	    var trTemp = document.createElement('TR');
	    var tdTemp = document.createElement('TD');
    	
	    tbodyMain.appendChild(this.getMiniCalenderHeader(day, month, year, bolOnclick));
    	
	    // Sun, Mon, Tue, Wed, Thu, Fri, Sat
	    var tblTemp = document.createElement('TABLE');
	    tblTemp.cellPadding="0";
	    tblTemp.cellSpacing="0";
	    tblTemp.className="tablecalbody";
	    var tbodyTemp = document.createElement('TBODY');
	    trTemp = document.createElement('TR');
	    trTemp.align="center";
	    trTemp.className='trdayheader';
	    for(var i = 0; i<=6; i++)
		    {
			    tdTemp = document.createElement('TD');
			    //tdTemp.width="13%";
			    tdTemp.valign="top";
			    tdTemp.className = "dayheadertext";
    			
			    fontTemp = document.createElement('FONT');
    			
			    fontTemp.innerHTML = dayOfWeekArray[i];
			    tdTemp.appendChild(fontTemp);
			    trTemp.appendChild(tdTemp);												
		    }
	    tbodyMain.appendChild(trTemp);

	    // First Week dates
    	
    		
	    trTemp = document.createElement('TR');	
	    trTemp.align="center";
    	
	    var spanTemp;
	    for (i = 0; i <= 6; i++)
		    {
			    day++;
    			
			    tdTemp = document.createElement('TD');
    			
			    if(day>0)
				    {
					    tdTemp = this.getMiniCalenderCell(day, month, year, true, true, i);
				    }
			    else
				    {
					    if( this.get_displayMonth() != 1 )
					    {
						    tdTemp = this.getMiniCalenderCell(noDaysArray[month-2] + day, month, year, false, true, i);
					    }
					    else
					    {
						    tdTemp = this.getMiniCalenderCell(noDaysArray[11] + day, month, year, false, true, i);
					    }
				    }
			    tdTemp.valign="top";
			    trTemp.appendChild(tdTemp);
    			
		    }
	    tbodyTemp.appendChild(trTemp);
    		
	    // Remaining Week Dates
    	
	    for(var j=1; j < 6; j++)
		    {
			    trTemp = document.createElement('TR');	
			    trTemp.align="center";
			    for (i = 0; i <= 6; i++)
				    {
					    day++;
    					
					    if(day <= noDays)
						    {
							    tdTemp = this.getMiniCalenderCell(day, month, year, true, false, i);							
						    }
					    else
						    {
							    tdTemp = this.getMiniCalenderCell(day - noDays, month, year, false, false, i)
						    }
    						
					    trTemp.appendChild(tdTemp);															
				    }							
			    tbodyTemp.appendChild(trTemp);	
		    }	
    		
	    trTemp = document.createElement('TR');
	    tdTemp = document.createElement('TD');
    	
	    tdTemp.colSpan='7';
    		
	    tblTemp.appendChild(tbodyTemp);				
	    tdTemp.appendChild(tblTemp);
	    trTemp.appendChild(tdTemp);
	    tbodyMain.appendChild(trTemp);													
	    tblMain.appendChild(tbodyMain);		
    },
    
    getMiniCalenderHeader: function(day, month, year, bolOnclick)
    {
	    var trTemp = document.createElement('TR');
	    var tdTemp = document.createElement('TD');
	    trTemp.className = "calheaderrow";
	    tdTemp.colSpan="1";
	    var aTemp = document.createElement('A');
	    aTemp.innerHTML="&lt;";
	    aTemp.href="javascript:void(0);";
	    aTemp.title = "previous month";
	  var newDate = this.get_displayDate();
      var newMonth = this.get_displayMonth();
      var newYear = this.get_displayYear();
      
      if(this.get_displayMonth()!=1)
        {														
	        newMonth = this.get_displayMonth() - 1;
    	    
	        if( newMonth < 1 )
	        {
		        newYear = this.get_displayYear() - 1;
		        newMonth = 12;
	        }
        }
        else
        {
	        newYear = this.get_displayYear() - 1;
		    newMonth = 12;
        } 
	   var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), this.get_displayDate(), newMonth, newYear);
        $addHandler(aTemp, 'click', Function.createCallback(this._previousMonthDelegate, calendarEventArgs));
        
	    aTemp.className='calheadernav';
	    tdTemp.align="center";
    	
	    tdTemp.appendChild(aTemp);
	    trTemp.appendChild(tdTemp);
    	
	    tdTemp = document.createElement('TD');
	    tdTemp.className = "calheaderrow";
	    tdTemp.colSpan="5";
	    tdTemp.align="center";
	    var spanTemp = document.createElement('SPAN');
	    //fontTemp.className='anchorArrows';

	    if(bolOnclick)
		    {
			    spanTemp.innerHTML = monthArray[month-1] + " " + year;	
		    }
	    else
		    {
			    spanTemp.innerHTML = monthArray[month-1];
		    }	
    	
	    tdTemp.appendChild(spanTemp);
	    trTemp.appendChild(tdTemp);
    	
	    tdTemp = document.createElement('TD');
	    tdTemp.colSpan="1";
	    aTemp = document.createElement('A');
	    aTemp.innerHTML="&gt;";
	    aTemp.href="javascript:void(0);";
	    aTemp.title = "next month";
	    newYear = this.get_displayYear();
	    
	    if(this.get_displayMonth()<12)
        {														
	        newMonth = this.get_displayMonth() + 1;
    	    
	        if( newMonth > 12 )
	        {
		        newYear = this.get_displayYear() + 1;
		        newMonth = 1;
	        }
        }
        else
        {
	        newYear = this.get_displayYear() + 1;
		    newMonth = 1;
        }
        
        calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), this.get_displayDate(), newMonth, newYear);
        $addHandler(aTemp, 'click', Function.createCallback(this._nextMonthDelegate, calendarEventArgs));
       
	    aTemp.className='calheadernav';
	    tdTemp.align="center";
    	
	    tdTemp.appendChild(aTemp);
	    trTemp.appendChild(tdTemp);
    	
	    return trTemp;

    },

    getMiniCalenderCell: function(day, month, year, isCurrrentMonth, isFirstWeek, colIndex)
    {
	    var todaysDate = new Date();
	    var tdTemp = document.createElement('TD');
	    //tdTemp.width="20";
	    tdTemp.align='center';
	    tdTemp.valign='middle';
	    if((colIndex==0) || (colIndex==6))
	    {
		    //tdTemp.bgColor="#DDE1E2";
	    }
	    var fontTemp = document.createElement('FONT');
	    //fontTemp.style.height="17px";
	    fontTemp.align='center';
    	
    	
	    var spanTemp = document.createElement('SPAN');
	    spanTemp.innerHTML = day;
	    spanTemp.style.cursor ="pointer";	

	    fontTemp.appendChild(spanTemp);
    	
	    if(isCurrrentMonth == true)
	    {
		    tdTemp.className="monthdate";	
		    tdTemp.setAttribute("isCurrrentMonth","1");
    		
		    if ( (this.get_displayDate() == day) && ( month == this.get_displayMonth() )  && ( year == this.get_displayYear()) )
		    {
			    tdTemp.className="selecteddate";								
		    } 
    		
		    if ( (todaysDate.getDate() == day) && ( month == (todaysDate.getMonth() + 1) )  && ( year == todaysDate.getFullYear() ) )
	        {
		        tdTemp.className="currentdate";								
	        }
	    }
	    else
	    {
	        tdTemp.className="othermonthdate";	
	        tdTemp.setAttribute("isCurrrentMonth","0");
	    }
    	
	    /*if ( (todaysDate.getDate() == day) && ( month == (todaysDate.getMonth() + 1) )  && ( year == todaysDate.getFullYear() ) )
	    {
		    tdTemp.className="selecteddate";								
	    }*/
    	
    	if(isFirstWeek == false)
	    {
		    if(isCurrrentMonth == false)
		    {
			    if( month != 12 )
			    {
				    month = month + 1;
			    }
			    else
			    {
				    month = 1;
				    year = year + 1;
			    }
		    }
	    }
	    else
	    {
		    if(isCurrrentMonth == false)
		    {
			    if( month != 1 )
			    {
				   month = month - 1;
			    }
			    else
			    {
				    month = 12;
				    year = year - 1;
			    }
		    }
		    
	    }
		    
    	var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), day, month, year);
        $addHandler(spanTemp, 'click', Function.createCallback(this._dateSelectedDelegate, calendarEventArgs));

	    tdTemp.appendChild(fontTemp);	
	    return tdTemp;
    },
    
    displayMonthView: function()
    {  
	    this.createMonthViewTable();
	 
	    return false;
    },
    
    createMonthViewTable: function()
    {
	    var element = this.get_element();
	    var month = this.get_displayMonth();
	    var year = this.get_displayYear();
	    var firstOfMonth = new Date(month + "/1/" + year );
	    var day = - firstOfMonth.getDay();												
    	
        element.innerHTML = "";
	    // determine number of days in month
	    var noDays = noDaysArray[month-1];
	    if (month == 2){
		    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
		    noDays = 29;
		    }
		    }

	    //fabricate string for tables
    	
	    var tblMain = document.createElement('TABLE');
	    element.appendChild(tblMain);
	    tblMain.border ="0";
	    tblMain.cellPadding ="0";
	    tblMain.cellSpacing ="1";
	    tblMain.width ="100%";
	    tblMain.className="tablecalbodybg";
	    var tbodyMain = document.createElement('TBODY');
    	
	    // Month Header
    	
	    var trTemp = document.createElement('TR');
	    var tdTemp = document.createElement('TD');
    	
	    // Sun, Mon, Tue, Wed, Thu, Fri, Sat
    	
	    trTemp = document.createElement('Tr');
    	
	    trTemp.className = "tryearmonth";
	    trTemp.align="center";
	    trTemp = this.getweektitles();
    	
	    tbodyMain.appendChild(trTemp);

	    // First Week dates
    		
	    trTemp = document.createElement('TR');	
	    trTemp.align="center";
    	trTemp.className = "monthrow";
    	
	    for (i = 0; i <= 6; i++)
		    {
			    tdTemp = document.createElement('TD');
    	        tdTemp.className = "tdvaligntop monthrow";
    	
			    tdTemp.align="right";
			    tdTemp.style.width="110px";
			    tdTemp.height="130px";
			    //tdTemp.style.border="1px solid #cccccc";
			    tdTemp.valign = "top";						
			    day++;
			    if(day>0)
				    {
					    tdTemp.appendChild(this.createMonthCell(day));
				    }
			    else
				    {
					    tdTemp.appendChild(this.createMonthCell("--"));																					
				    }
    																			
			    trTemp.appendChild(tdTemp);														
		    }
	    tbodyMain.appendChild(trTemp);
    		
	    // Remaining Week Dates
    	
    	
	    for(var j=1; j < 6; j++)
		    {
			    trTemp = document.createElement('TR');	
			    trTemp.align="right";
			    
			    if(j%2 == 0)
			    {
			        trTemp.className = "monthrow";
			    }
			    else
			    {
			        trTemp.className = "monthalternativerow";
			    }
			    
			    tdTemp.valign = "top";
			    for (i = 0; i <= 6; i++)
				    {
					    tdTemp = document.createElement('TD');
    			        
			            if(j%2 == 0)
			            {
			                tdTemp.className = "tdvaligntop monthrow";
			            }
			            else
			            {
			                tdTemp.className = "tdvaligntop monthalternativerow";
			            }
			    
					    tdTemp.align="left";
					    //tdTemp.width="100px";
					    tdTemp.height="130px";
    					
					    //tdTemp.style.border="1px solid #cccccc";
					    day++;
    					
					    if(day <= noDays)
						    {
								    tdTemp.appendChild(this.createMonthCell(day));
						    }
					    else
						    {
								    tdTemp.appendChild(this.createMonthCell("--"));														
						    }
    						
					    trTemp.appendChild(tdTemp);	
    																			
				    }							
			    tbodyMain.appendChild(trTemp);	
		    }	
    											
	    tblMain.appendChild(tbodyMain);			

	    return;
    },
    
    createMonthCell: function(dateValue)
    {
    	
	    var tblMain = document.createElement('TABLE');
	    tblMain.border ="0";
	    tblMain.cellPadding ="0";
	    tblMain.cellSpacing ="1";
	    tblMain.width ="100%";
	    tblMain.height ="130px";
    	
	    var tbodyMain = document.createElement('TBODY');
	    var trTemp = document.createElement('TR');
	    //trTemp.height= "4";
	    var tdTemp = document.createElement('TD');
	    tdTemp.align="right";
	    tdTemp.valign="top";
	    tdTemp.style.paddingTop = "5px";
    	
	    if(dateValue != "--")
	    {
		    var spanTemp = document.createElement('A');
		    spanTemp.innerHTML = "&nbsp;" + dateValue;
		    spanTemp.className='linksweekheader';
		    spanTemp.href = "javascript:void(0);";
		    var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), dateValue, this.get_displayMonth(), this.get_displayYear());
            $addHandler(spanTemp, 'click', Function.createCallback(this._dateSelectedDelegate, calendarEventArgs));
		    tdTemp.appendChild(spanTemp);
	    }
	    else
	    {
		    var spanTemp = document.createElement('SPAN');
		    spanTemp.innerHTML =  "&nbsp;" + dateValue;
		    tdTemp.appendChild(spanTemp);
	    }
    	
	    trTemp.appendChild(tdTemp);
	    tbodyMain.appendChild(trTemp);
    	
	    if(dateValue != "--")
		    {
    								
			    trTemp = document.createElement('TR');
			    tdTemp = document.createElement('TD');
			    tdTemp.align="left";
			    tdTemp.valign="top";
			    tdTemp.style.width = "110px";
			    tdTemp.style.height = "130px";
    			
			    var tdId = "";
    			
			    if(this.get_displayMonth() < 10)
			    {
				    tdId = "0" + this.get_displayMonth();
			    }
			    else
			    {
				    tdId = this.get_displayMonth();
			    }
    			
			    if(dateValue < 10)
			    {
				    tdId += "_0" + dateValue;
			    }
			    else
			    {
				    tdId += "_" + dateValue;
			    }
    		
			     tdId+= "_" + this.get_displayYear();
    			
			    tdTemp.id = tdId;
			    tdTemp.className = "tdweekcoldate";
			    trTemp.appendChild(tdTemp);
			    tbodyMain.appendChild(trTemp);
    			
    		
		    }
	    else
		    {
			    trTemp = document.createElement('TR');
			    tdTemp = document.createElement('TD');
			    tdTemp.align="center";
			    tdTemp.valign="top";
			    tdTemp.style.width = "110px";
			    tdTemp.style.height = "130px";
			    trTemp.appendChild(tdTemp);
			    tbodyMain.appendChild(trTemp);
    			
			    trTemp = document.createElement('TR');
			    tdTemp = document.createElement('TD');
			    tdTemp.align="center";
			    tdTemp.valign="top";
			    trTemp.appendChild(tdTemp);
			    tbodyMain.appendChild(trTemp);
    			
		    }	
    						
	    tblMain.appendChild(tbodyMain);
    	
	    return tblMain;
    },
    
    getMonthViewHeader: function(month)
    {
	    var tblMain = document.createElement('TABLE');
	    var tbodyMain = document.createElement('TBODY');
	    var trTemp = document.createElement('TR');
	    var tdTemp;
	    var aLinks;
	    var fontTemp = document.createElement('Font');
	    var newDate = this.get_displayDate();
	    var newMonth = this.get_displayMonth();
	    var newYear = this.get_displayYear();
    		
	    tblMain.border ="0";
	    tblMain.cellPadding ="0";
	    tblMain.cellSpacing ="0";
	    tblMain.width ="100%";
	    tblMain.className = "tablecalyearheader";

        trTemp.className='tryearmonth';
	    tdTemp = document.createElement('TD');
	    aLinks = document.createElement('A');
	    tdTemp.appendChild(aLinks);
	    tdTemp.align="center";
	    tdTemp.width="15%";
	    tdTemp.className="calhead";
	    aLinks.href = "javascript:void(0);";
	    aLinks.className='newsText';
	    aLinks.innerHTML = "Previous Month";
	    
	    if(this.get_displayMonth()!=1)
        {														
	        newMonth = this.get_displayMonth() - 1;
    	    
	        if( newMonth < 1 )
	        {
		        newYear = this.get_displayYear() - 1;
		        newMonth = 12;
	        }
        }
        else
        {
	        newYear = this.get_displayYear() - 1;
		    newMonth = 12;
        }
	    
	    var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), newDate, newMonth, newYear);
        $addHandler(aLinks, 'click', Function.createCallback(this._previousMonthDelegate, calendarEventArgs));

	    trTemp.appendChild(tdTemp);

	    tdTemp = document.createElement('TD');
	    tdTemp.align="center";
	    tdTemp.width="70%";
	    tdTemp.className="calhead";

        fontTemp.className="fontmonthyear";
	    fontTemp.innerHTML= "<b>" + monthArray[month-1] + " " + this.get_displayYear() + "</b>";	
	    tdTemp.appendChild(fontTemp);
	    trTemp.appendChild(tdTemp);


	    tdTemp = document.createElement('TD');
	    aLinks = document.createElement('A');
	    tdTemp.align="center";
	    tdTemp.width="15%";
	    tdTemp.className="calhead";
	    newYear = this.get_displayYear();
	    
	    if(this.get_displayMonth()<12)
        {														
	        newMonth = this.get_displayMonth() + 1;
    	    
	        if( newMonth > 12 )
	        {
		        newYear = this.get_displayYear() + 1;
		        newMonth = 1;
	        }
        }
        else
        {
	        newYear = this.get_displayYear() + 1;
		    newMonth = 1;
        }
        
        calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), newDate, newMonth, newYear);
	    $addHandler(aLinks, 'click', Function.createCallback(this._nextMonthDelegate, calendarEventArgs));
	    
	    aLinks.href = "javascript:void(0);";
	    aLinks.className='newsText';
	    aLinks.innerHTML = "Next Month";
	    tdTemp.appendChild(aLinks);
	    trTemp.appendChild(tdTemp);

	    tbodyMain.appendChild(trTemp);
	    tblMain.appendChild(tbodyMain);

	    return tblMain;
    },

    getweektitles: function()
    {
        var trTemp = document.createElement('TR');
        trTemp.className = "tryearmonth";
        
	    for(var i = 0; i<=6; i++)
		    {
			    tdTemp = document.createElement('TD');
			    tdTemp.align="center";
			    tdTemp.className= 'weekheadertext'; //'tblweektitles';
			    tdTemp.style.width="110px";
    			
			    fontTemp = document.createElement('SPAN');
			    fontTemp.style.width="50px";
    			
			    fontTemp.innerHTML = weekArray[i];
			    tdTemp.appendChild(fontTemp);
			    trTemp.appendChild(tdTemp);												
		    }
    	
	    return trTemp;
    },
    
    displayDayView: function()
    {  
	    this.createDayViewTable();
	    //getTimeSlotPerMonth(1,displayMonth,displayYear,"");
	    return false;
    },
    
    createDayViewTable: function()
    {
        var element = this.get_element();
  	    var tblMain = document.createElement('TABLE');
  	    var tbodyMain = document.createElement('TBODY');
  	    var tr, td, trTemp, tdTemp, tblTemp, tbodyTemp;
  	    var curDate;

	    element.appendChild(tblMain);
	    tblMain.border ="0";
	    tblMain.cellPadding ="0";
	    tblMain.cellSpacing ="1";
	    tblMain.width ="100%";
	    tblMain.className="tablecalbodybg";
       	
       	tr = this.getDayViewHeader();
       	tbodyMain.appendChild(tr);		
       	
       	tr = document.createElement('TR');
       	td = document.createElement('TD');
       	tr.className = "dayviewrow";
       	td.className = "dayviewcol1";
       	
       	curDate = new Date(this.get_displayMonth() + "/" + this.get_displayDate() + "/" + this.get_displayYear());
       	td.innerHTML = weekArray[curDate.getDay()] + ", " + monthArray[this.get_displayMonth() - 1] + " " + this.get_displayDate() + ", " + this.get_displayYear();
       	tr.appendChild(td);	
     
       	td = document.createElement('TD');
        td.colSpan = "2";
        td.id = "tdDateViewDetails";
        
        tblTemp = document.createElement('TABLE');
        tbodyTemp = document.createElement('TBODY');
        tbodyTemp.id = "tbodyDateViewDetails";
        
        tblTemp.border ="0";
	    tblTemp.cellPadding ="0";
	    tblTemp.cellSpacing ="1";
	    tblTemp.width ="100%";
	    tblTemp.className="tablecalbodybg";
	    
	    tblTemp.appendChild(tbodyTemp);	
	    td.appendChild(tblTemp);	
	    
        tr.appendChild(td);	
       	tbodyMain.appendChild(tr);	
       	
       	tblMain.appendChild(tbodyMain);		
       	
	    return;	
    },


    getDayViewHeader: function()
    {
	    var trTemp = document.createElement('TR');
	    var tdTemp;
	    
	    trTemp.className = "dayviewheader";
	    tdTemp = document.createElement('TD');
	    tdTemp.className = "dayviewcol1";
	    tdTemp.innerHTML = "Day";
	    trTemp.appendChild(tdTemp);

	    tdTemp = document.createElement('TD');
	    tdTemp.className = "dayviewcol2";
	    tdTemp.innerHTML = "Time";
	    trTemp.appendChild(tdTemp);
	    
	    tdTemp = document.createElement('TD');
	    tdTemp.className = "dayviewcol3";
	    tdTemp.innerHTML = "Description";
	    trTemp.appendChild(tdTemp);

	    return trTemp;
    },
    
    displayYearView: function()
    {
	    this.createYearViewTable();
	    return false;
    },

    createYearViewTable: function()
    {
    	var element = this.get_element();
	    var tblMain = document.createElement('TABLE');
	    
	    element.innerHTML = "";
	    element.appendChild(tblMain);
	    tblMain.cellSpacing = "0";
	    tblMain.cellPadding = "0";
	    tblMain.width = "100%";
	    tblMain.height = "500";
	    tblMain.border = "0";
	    tblMain.className = "tablecalbodybg";
    	
	    // Header - Year
    	
	    var tbodyMain = document.createElement('TBODY');
	    var trTemp = document.createElement('TR');
	    var tdTemp = document.createElement('TD');
	    tdTemp.width ="100%"
	    tdTemp.colSpan ="3";
	    tdTemp.align="center";
	    var spanTemp = document.createElement('SPAN');
	    //spanTemp.innerHTML = "<b>"+  displayYear  + "</b>"; 
	    tdTemp.valign="top";
	    tdTemp.appendChild(this.getYearViewHeader());
	    trTemp.appendChild(tdTemp);
	    tbodyMain.appendChild(trTemp);
    	
	    // Body - Months
    	
	    var trbody = document.createElement('TR');
	    var tdbody = document.createElement('TD');
	    var tblbody = document.createElement('TABLE');
	    var tbodybody = document.createElement('TBODY');
	    tblbody.cellSpacing = "1";
	    tblbody.cellPadding = "0";
	    tblbody.border = "0";
	    //tblbody.className = "tablecalbody";
    	
	    for(var intIndex=0;intIndex< 4;intIndex++)
		    {
			    trTemp = document.createElement('TR');
    			
			    if(intIndex==0)
			    {
    			
				    tdTemp = document.createElement('TD');
				    tdTemp.className = "tdvaligntop";
				    tdTemp.width="258px";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(0));
				    trTemp.appendChild(tdTemp);
    				
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="258px";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(1));
				    trTemp.appendChild(tdTemp);
    				
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="258px";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(2));
				    trTemp.appendChild(tdTemp);
			    }
			    else if(intIndex==1)
			    {
    			
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(3));
				    trTemp.appendChild(tdTemp);
    				
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(4));
				    trTemp.appendChild(tdTemp);
    				
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(5));
				    trTemp.appendChild(tdTemp);
			    }
			    else if(intIndex==2)
			    {
    			
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(6));
				    trTemp.appendChild(tdTemp);
    													
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(7));
				    trTemp.appendChild(tdTemp);
    				
				    tdTemp = document.createElement('TD');
				    tdTemp.className="tdvaligntop";
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.appendChild(this.createYearCell(8));
				    trTemp.appendChild(tdTemp);
			    }
			    else if(intIndex==3)
			    {
    			
				    tdTemp = document.createElement('TD');
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.className="tdvaligntop";
				    tdTemp.appendChild(this.createYearCell(9));
				    trTemp.appendChild(tdTemp);
    													
				    tdTemp = document.createElement('TD');
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.className="tdvaligntop";
				    tdTemp.appendChild(this.createYearCell(10));
				    trTemp.appendChild(tdTemp);
    				
				    tdTemp = document.createElement('TD');
				    tdTemp.width="33%";
				    tdTemp.align="center";
				    tdTemp.className="tdvaligntop";
				    tdTemp.appendChild(this.createYearCell(11));
				    trTemp.appendChild(tdTemp);
			    }
    				
			    tbodybody.appendChild(trTemp);
		    }
    		
	    tblbody.appendChild(tbodybody);
	    tdbody.appendChild(tblbody);
	    trbody.appendChild(tdbody);
	    tbodyMain.appendChild(trbody);
	    tblMain.appendChild(tbodyMain);
    	
	    return;				
    },

    getYearViewHeader: function()
    {
	    var tblMain = document.createElement('TABLE');
	    var tbodyMain = document.createElement('TBODY');
	    var trTemp = document.createElement('TR');
	    var tdTemp;
	    var aLinks;
	    var fontTemp = document.createElement('Font');
    		
	    tblMain.className ="tablecalyearheader";
	    tblMain.border ="0";
	    tblMain.cellPadding ="0";
	    tblMain.cellSpacing ="0";
	    tblMain.width ="100%";

        trTemp.className = "tryearmonth";
	    tdTemp = document.createElement('TD');
	    aLinks = document.createElement('A');
	    tdTemp.appendChild(aLinks);
	    tdTemp.align="center";
	    tdTemp.width="15%";
	    tdTemp.className="calhead";
	    aLinks.className='newsText';
	    aLinks.href = "javascript:void(0);";
	    aLinks.innerHTML = "Previous Year";
	    var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), this.get_displayDate(), this.get_displayMonth(), this.get_displayYear()-1);
        $addHandler(aLinks, 'click', Function.createCallback(this._previousYearDelegate, calendarEventArgs));
	   
	    trTemp.appendChild(tdTemp);

	    tdTemp = document.createElement('TD');
	    tdTemp.align="center";
	    tdTemp.width="70%";
	    tdTemp.className="calhead";
        fontTemp.className="fontmonthyear";
	    fontTemp.innerHTML= "<b>" + this.get_displayYear() + "</b>";	
	    tdTemp.appendChild(fontTemp);
	    trTemp.appendChild(tdTemp);


	    tdTemp = document.createElement('TD');
	    aLinks = document.createElement('A');
	    tdTemp.align="center";
	    tdTemp.width="15%";
	    tdTemp.className="calhead";
	    aLinks.href = "javascript:void(0);";
	    calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), this.get_displayDate(), this.get_displayMonth(), this.get_displayYear() + 1);
        $addHandler(aLinks, 'click', Function.createCallback(this._nextYearDelegate, calendarEventArgs));
        
	    aLinks.className='newsText';
	    aLinks.innerHTML = "Next Year";
	    tdTemp.appendChild(aLinks);
	    trTemp.appendChild(tdTemp);

	    tbodyMain.appendChild(trTemp);
	    tblMain.appendChild(tbodyMain);

	    return tblMain;
    },

    createYearCell: function(month)
    {
	    var tblMain = document.createElement('TABLE');
	    var tbodyMain = document.createElement('TBODY');
	    var trTemp = document.createElement('TR');
	    var tdTemp = document.createElement('TD');
	    var spanTemp = document.createElement('SPAN');
	    var aLinks = document.createElement('A');
    	
	    tblMain.cellspacing = "0";
	    tblMain.cellPadding = "0";
	    tblMain.width = "100%";
	    tblMain.height = "100%";
    	
    	
	    tdTemp.align = "left";
	    tdTemp.className = "tdvaligntop";
    	
	    aLinks.setAttribute("displaymonth", month + 1)
	    var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), this.get_displayDate(), month + 1, this.get_displayYear());
        $addHandler(aLinks, 'click', Function.createCallback(this._monthSelectedDelegate, calendarEventArgs));

	    aLinks.className='linksmonthnames';
	    aLinks.href = "javascript:void(0);";
	    aLinks.innerHTML = monthArray[month];
	    //tdTemp.style.padding = "0px 0px 0px 5px";
	    tdTemp.appendChild(aLinks);
	    trTemp.appendChild(tdTemp);
	    tbodyMain.appendChild(trTemp);
    	
	    trTemp = document.createElement('TR');
	    tdTemp = document.createElement('TD');
	    tdTemp.className = "tdweekcoldate";
	    tdTemp.align = "left";
	    tdTemp.valign = "top";
	    tdTemp.style.width = "100%";
	    tdTemp.id = "tdYView_" + monthArray[month].toLowerCase() + "_" + this.get_displayYear();
	    tdTemp.style.height = "200px";
	    trTemp.appendChild(tdTemp);
    	
	    tbodyMain.appendChild(trTemp);
	    tblMain.appendChild(tbodyMain);
    	
	    return tblMain;
    },
    
    displayWeekView: function()	
    {

	    this.createWeekViewTable(this.getFirstDayofWeek(), 7, 1);	
	    //createWeekViewTable(displayDate,7);					
	    return false;
    },

    getWeekViewHeader: function(curDate)
    {

	    var tblMain = document.createElement('TABLE');
	    var tbodyMain = document.createElement('TBODY');
	    var trTemp = document.createElement('TR');
	    var tdTemp;
	    var aLinks;
	    var fontTemp = document.createElement('Font');
	    var newDate;

	    tblMain.border ="0";
	    tblMain.cellPadding ="0";
	    tblMain.cellSpacing ="0";
	    tblMain.width ="100%";

        trTemp.className = "tryearmonth";
	    tdTemp = document.createElement('TD');
	    aLinks = document.createElement('A');
	    tdTemp.appendChild(aLinks);
	    tdTemp.align="center";
	    tdTemp.width="15%";
	    tdTemp.className="calhead";
	    aLinks.className='newsText';
	    aLinks.href = "javascript:void(0);";
	    aLinks.innerHTML = "Previous Week";
    	
	    newDate = addDays(curDate, -7);
    	var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), newDate.getDate(), newDate.getMonth() + 1,  newDate.getFullYear());
        $addHandler(aLinks, 'click', Function.createCallback(this._previousWeekDelegate, calendarEventArgs));			

	    trTemp.appendChild(tdTemp);

	    tdTemp = document.createElement('TD');
	    tdTemp.align="center";
	    tdTemp.width="70%";
	    tdTemp.className="calhead";

        fontTemp.className="fontmonthyear";
	    fontTemp.innerHTML= "<b>" + monthArray[this.get_displayMonth()-1] + " " + this.get_displayYear() + "</b>";	
	    tdTemp.appendChild(fontTemp);
	    trTemp.appendChild(tdTemp);

	    tdTemp = document.createElement('TD');
	    aLinks = document.createElement('A');
	    tdTemp.align="center";
	    tdTemp.width="15%";
	    tdTemp.className="calhead";
	    aLinks.href = "javascript:void(0);";
    	
	    newDate = addDays(curDate, 7);
	  
	   
	    calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), newDate.getDate(), newDate.getMonth() + 1,  newDate.getFullYear());
        $addHandler(aLinks, 'click', Function.createCallback(this._previousWeekDelegate, calendarEventArgs));	
	    
    				
	    aLinks.className='newsText';
	    aLinks.innerHTML = "Next Week";
	    tdTemp.appendChild(aLinks);
	    trTemp.appendChild(tdTemp);

	    tbodyMain.appendChild(trTemp);
	    tblMain.appendChild(tbodyMain);

	    return tblMain;
    },

    createWeekViewTable: function(intStartDate,int_No_Of_Days, getData)
    {
        var negativeValue=intStartDate;
	    var element = this.get_element();
	    var curDate = new Date(this.get_displayMonth() + "/" + this.get_displayDate() + "/" + this.get_displayYear());
	    var tdTempToShow;
	    var spanTempToShow;
	    var nextMonth=false;
	    var varMonth;
	    var varYear;
	    var newDate;
	    var tempMonth;
	    var tempYear;
	    var tempDate;
    	
	    var startDate;
	    var startMonth;
	    var startYear;
    	
	    startDate=0;
	    startMonth = this.get_displayMonth();
	    startYear = this.get_displayYear();
	    intStartDate = parseInt(intStartDate,0);
    	
	    var tblMain = document.createElement('TABLE');
	    element.innerHTML = "";
	    element.appendChild(tblMain);
	    tblMain.cellSpacing = "1";
	    tblMain.cellPadding = "0";
	    tblMain.width = "100%";
	    tblMain.height = "100%";
	    tblMain.border = "0";
	    tblMain.className = "tablecalbodybg";
    	
	    var tbodyMain = document.createElement('TBODY');
    	
	    // Header  --> Time | Date
    	
	    var trTemp = document.createElement('TR');
	    var tdTemp = document.createElement('TD');
    	
	    tdTemp.colSpan = int_No_Of_Days + 2;
	    tdTemp.style.display = "none";
	    tdTemp.appendChild(this.getWeekViewHeader(curDate)); 
	    trTemp.appendChild(tdTemp);
	    //tbodyMain.appendChild(trTemp);
    	
    	 // week names header
    	
	    trTemp = document.createElement('TR');
	    trTemp.className = "tryearmonth";
        trTemp.id = "trWView_tblWeekNameHeader";

	    for(var intIndex = 0;intIndex<= int_No_Of_Days - 1 ; intIndex++)
	    {
	        tdTemp=document.createElement('TD');
	        tdTemp.style.width="110px";
		    tdTemp.align="center";
		    spanTempDisplay = document.createElement('SPAN'); 
		    spanTempDisplay.className = "weekheadertext";
            spanTempDisplay.innerHTML = weekArray[intIndex];
		    tdTemp.appendChild(spanTempDisplay); 
		    trTemp.appendChild(tdTemp); 
	    }
    	
	    tbodyMain.appendChild(trTemp);	
	    
	    
	    trTemp = document.createElement('TR');
	    tdTemp = document.createElement('TD');
	    trTemp.className = "trweekdates";
        
        /* week day headers */
        
        tdTemp=document.createElement('TD');
        tdTemp.width="80px";
        tdTemp.innerHTML = "&nbsp;&nbsp;";
        //trTemp.appendChild(tdTemp);	
        trTemp.id = "trWView_tblHeader";

	    for(var intIndex = 0;intIndex<= int_No_Of_Days - 1 ; intIndex++)
	    {
		    tdTemp=document.createElement('TD');
		    tdTemp.style.width="110px";
		    tdTemp.align="center";
    	
		    spanTemp = document.createElement('SPAN');
		    //spanTemp.style.width="100px";
		    spanTemp.style.display='none';
		    spanTempDisplay = document.createElement('A'); 
		    //spanTempDisplay.style.width="100px";
		    spanTempDisplay.className = "linksweekheader";
		    spanTempDisplay.href = "javascript:void(0);";
    		
		    if( intStartDate <= 0 )
		    {
			    newDate = addDays(curDate, intStartDate - 1);
	            tempMonth = newDate.getMonth() + 1;
	            tempYear = newDate.getFullYear();
	            tempDate = newDate.getDate();	
		    }
		    else if( intStartDate > this.getNo_Of_Days())
		    {
			    nextMonth=true;
			    intStartDate=1;
    			
			    if(this.get_displayMonth()<12)
			    {
				    tempMonth = (this.get_displayMonth() + 1);
	                tempYear = this.get_displayYear();	               
	                tempDate = intStartDate ;
    			
			    }
			    else
			    {
				    tempMonth = 1;
	                tempYear = (this.get_displayYear() + 1);
	                tempDate = intStartDate;
			    }
    			
		    }
		    else
		    {	
			    if(nextMonth==false)
			    { 
			        var DateOfMonth;    
				    tempMonth = this.get_displayMonth();
	                tempYear = this.get_displayYear();
	                tempDate = intStartDate;

	               
			    }
			    else
			    {
				    if(this.get_displayMonth()<12)
				    {
				        tempMonth = (this.get_displayMonth() + 1);
	                    tempYear = this.get_displayYear();
	                    tempDate = intStartDate;
				    }
				    else
				    {
				        tempMonth = 1;
	                    tempYear = (this.get_displayYear() + 1);
	                    tempDate = intStartDate;
				    }
			    }
		    }
    		
		    if(startDate==0)
		    {
			    startDate = tempDate;
			    startMonth = tempMonth;
			    startYear = tempYear;
		    }
		    
		    
		    tdTemp.align = "right";
		    tdTemp.style.paddingRight = "2px";
		    
		    spanTemp.innerHTML = "<b>" + tempDate + "/" + tempMonth + "/" + tempYear + "</b>";
            spanTempDisplay.innerHTML = tempDate;
            spanTempDisplay.setAttribute("displayDate",tempDate);
            spanTempDisplay.setAttribute("displayMonth",tempMonth);
            spanTempDisplay.setAttribute("displayYear",tempYear);
        
            var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), tempDate, tempMonth,  tempYear);
            $addHandler(spanTempDisplay, 'click', Function.createCallback(this._dateSelectedDelegate, calendarEventArgs));
		   
		    tdTemp.appendChild(spanTemp); 
		    tdTemp.appendChild(spanTempDisplay); 
		    trTemp.appendChild(tdTemp);	
		    intStartDate = intStartDate + 1;						
	    }


	    tbodyMain.appendChild(trTemp);	
    	//alert(tbodyMain.innerHTML);
	    // Body
	    var intHour = 0;
	    var ctr=0;
	    var tdDViewId = 0;
	    var spanHeader;
    	
	    trTemp = document.createElement('TR');
    	trTemp.className = "weekrow";
    	
	    for(var index=0;index<=int_No_Of_Days-1;index++)
	    {
    													
		    var spanHeader = tbodyMain.getElementsByTagName("TR")[1].getElementsByTagName("TD")[index].getElementsByTagName("A")[0];
            var cellDate = parseInt(spanHeader.getAttribute("displayDate"));
            var cellMonth = parseInt(spanHeader.getAttribute("displayMonth"));
            var cellYear = parseInt(spanHeader.getAttribute("displayYear"));
            
             
            if( cellDate < 10 )
            {
                cellDate = "0" + cellDate;
            }
            
            if( cellMonth < 10 )
            {
                cellMonth = "0" + cellMonth;
            }
            
		    var tdTemp=document.createElement('TD');
		    tdTemp.style.width="110px";
		    tdTemp.style.height ="450px";
		    tdTemp.align="left";
    		
		    /*if(index != int_No_Of_Days-1)
		    {
		        tdContent.className="tdweekcoldate tdborderrightorange";
		    }
		    else
		    {
		        tdContent.className="tdweekcoldate";
		    }*/
    		
		    tdTemp.className="tdweekcoldate";
		    //tdTemp.style.height = "650px";
		    trTemp.appendChild(tdTemp);	
    		
		    tdTemp.innerHTML ="&nbsp;";
            tdTemp.id = "tdWView_" + cellMonth + "_" + cellDate + "_" + cellYear;
            trTemp.id = "trWView_" + cellMonth + "_" + cellDate + "_" + cellYear;
            
            tdTemp.setAttribute("cellLeft", (index * WCELLWIDTH) + WTCELLWIDTH);
            
	    }
    	
    	
	    tbodyMain.appendChild(trTemp);
    			
    	
	    tblMain.appendChild(tbodyMain);
    			
	    return;				
    },
    
    getWeeksStartDate: function()
    {
        var curDate = new Date(this.get_displayMonth() + "/" + this.get_displayDate() + "/" + this.get_displayYear());
        var startDate;
	    var startMonth;
	    var startYear;
	    var intStartDate;
	    var nextMonth=false;
	
	    startDate=0;
	    startMonth = this.get_displayMonth();
	    startYear = this.get_displayYear();
	    intStartDate = parseInt(this.getFirstDayofWeek(),0);
	    
	    if( intStartDate <= 0 )
		{
			newDate = addDays(curDate, intStartDate - 1);
	        startMonth = newDate.getMonth() + 1;
	        startYear = newDate.getFullYear();
	        startDate = newDate.getDate();	
		}
		else if( intStartDate > this.getNo_Of_Days())
		{
			nextMonth=true;
			intStartDate=1;
			
			if(displayMonth<12)
			{
				startMonth = (parseInt(this.get_displayMonth()) + 1);
	            startYear = this.get_displayYear();
	            startDate = intStartDate;
			
			}
			else
			{
				startMonth = 1;
	            startYear = (parseInt(this.get_displayYear()) + 1);
	            startDate = intStartDate;
			}
			
		}
		else
		{	
			if(nextMonth==false)
			{
				startMonth = this.get_displayMonth();
	            startYear = this.get_displayYear();
	            startDate = intStartDate;
			}
			else
			{
				if(displayMonth<12)
				{
				    startMonth = (parseInt(this.get_displayMonth()) + 1);
	                startYear = this.get_displayYear();
	                startDate = intStartDate;
				}
				else
				{
				    startMonth = 1;
	                startYear = (parseInt(this.get_displayYear()) + 1);
	                startDate = intStartDate;
				}
			}
		}
		
		return startMonth + "/" + startDate + "/" + startYear;
		
    },
    
    renderEvents: function()
    {
        var dataSource = this.get_dataSource();
        
        if(dataSource != null)
        {
            if(dataSource.length > 0)
            {
                switch(this.get_displayMode())
                {
                    case displayMode[0]:
                            this.renderEventsForDay()
                            break;
                    case displayMode[1]:
                            this.renderEventsForDay();
                            break;
                    case displayMode[2]:
                            this.renderEventsForWeek();
                            break;
                    case displayMode[3]:
                            this.renderEventsForMonth();
                            break;
                    case displayMode[4]:
                            this.renderEventsForYear();
                            break;
                }
            }
        }
    },
    
    getEventTitle: function(objEvent)
    {
        var eventTitle;
        var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEvent(objEvent);
        var divEvent = document.createElement("DIV");
        var aTemp = document.createElement("a");
        var br = document.createElement("BR");
        var divTemp = document.createElement("DIV");
        var spacer;
        var imgTemp;
        
       
        aTemp.href = "javascript:void(0);"
       
       // alert(objEvent.EventTitle);
        aTemp.innerHTML = objEvent.EventTitle;
       
        if(objEvent.IsPublic == true)
        {
             aTemp.title = "click view event details";
             aTemp.className = "caleventtitle";    
             $addHandler(aTemp, 'click', Function.createCallback(this._viewEventDelegate, calendarEventArgs));
        }
        else
        {
            aTemp.title = "Edit  event details";
            $addHandler(aTemp, 'click', Function.createCallback(this._editEventDelegate, calendarEventArgs));
        }
         
        divEvent.className = "clearboth";
        divEvent.appendChild(aTemp);
        divEvent.appendChild(br);
        
        divTemp.className = "floatright";
        
        if(this.get_events().getHandler("downloadEventToGoogle") != null)
        {
            imgTemp = document.createElement("IMG");
            aTemp = document.createElement("a");
            aTemp.title = "add to google calendar";
            aTemp.href = "javascript:void(0);"
            
            imgTemp.src = "../images/gcal_small.gif";
            imgTemp.alt = "add to google calendar";
            $addHandler(aTemp, 'click', Function.createCallback(this._downloadEventToGoogleDelegate, calendarEventArgs));
            
            aTemp.appendChild(imgTemp);
            divTemp.appendChild(aTemp);
            
            spacer = document.createElement("SPAN");
            spacer.innerHTML = "&nbsp;";
            divTemp.appendChild(spacer);
        }
        
        if(this.get_events().getHandler("downloadEvent") != null)
        {
            imgTemp = document.createElement("IMG");
            aTemp = document.createElement("a");
            aTemp.href = "javascript:void(0);"
            aTemp.title = "Download .ics file for import to other calendars";
            
            imgTemp.src = "../images/std-ical_icon_small.gif";
            imgTemp.alt = "Download .ics file for import to other calendars";
            $addHandler(aTemp, 'click', Function.createCallback(this._downloadEventDelegate, calendarEventArgs));
            
            aTemp.appendChild(imgTemp);
            divTemp.appendChild(aTemp);
            
            spacer = document.createElement("SPAN");
            spacer.innerHTML = "&nbsp;";
            divTemp.appendChild(spacer);
        }
        
        if(this.get_events().getHandler("deleteEvent") != null && objEvent.IsPublic == false)
        {
            imgTemp = document.createElement("IMG");
            aTemp = document.createElement("a");
            aTemp.href = "javascript:void(0);"
            aTemp.title = "delete this event";
            
            imgTemp.src = "../images/icon_delete.gif";
            imgTemp.alt = "delete this event";
            $addHandler(aTemp, 'click', Function.createCallback(this._deleteEventDelegate, calendarEventArgs));
            
            aTemp.appendChild(imgTemp);
            divTemp.appendChild(aTemp);
            
            spacer = document.createElement("SPAN");
            spacer.innerHTML = "&nbsp;";
            divTemp.appendChild(spacer);
        }
        
        divEvent.appendChild(divTemp);
        
        br = document.createElement("BR");
        divEvent.appendChild(br);
        
        
//        eventTitle = "<a class='caleventtitle' href='javascript:void(0);' title='click view event details' >";
//        eventTitle = eventTitle + "<span style='display:none;'>"+ objEvent.EventTitle  +"</span>";
//        eventTitle = eventTitle + objEvent.EventTitle;
//        eventTitle = eventTitle + "</a><br />";
//        eventTitle = eventTitle + "<div class='floatright'>";
//        eventTitle = eventTitle + "<a href='javascript:void(0);' title='add to google calendar' ><img src='../images/gcal_small.gif' alt='add to google calendar'></a>";
//        eventTitle = eventTitle + "&nbsp;<a href='javascript:void(0);' title='Download .ics file for import to other calendars' ><img alt='Download .ics file for import to other calendars' src='../images/std-ical_icon_small.gif'></a>&nbsp;";
//        eventTitle = eventTitle + "</div>";
//        
//        return eventTitle;

         return divEvent;
    },
    
    renderEventsForMonth: function()
    {
	    var dataSource = this.get_dataSource();
	    var intInnerLoop,intOuterLoop;
	    var spanTemp,spanTemp1;
	    var temp;
    	
	    if(dataSource != null)
	    {
		    var intTotalCount;
		    var objEvent;
    		
		    intTotalCount = dataSource.length;
    		
		    for(intIndex = 0; intIndex <= intTotalCount - 1; intIndex++)
		    {
			    objEvent = dataSource[intIndex];
			    var eventDate = new Date(objEvent.StartDate);
			    var eventTdId = Replace(getFormmatedDate(eventDate), "/","_");
			    var spanEvent = document.createElement("DIV");
			    var divDivider = document.createElement("DIV");
		        var tdContainer = document.getElementById(eventTdId);
		        var dayEventCount, dayEvents;
    		    
		        if(tdContainer != null)
		        {    
		        
		            dayEvents = getElementsByClassName(tdContainer, "event");
		            dayEventCount = dayEvents.length;
		        
		            if(dayEventCount % 2 == 0)
    		        {
    		            if(dayEventCount > 0)
    		            {
    		                dayEvents[dayEventCount - 1].className = "normalgray event";
    		            }
    		            
    		            spanEvent.className = "sunro1blue event"; 
    		        }
    		        else
    		        {
    		            if(dayEventCount > 0)
    		            {
    		                dayEvents[dayEventCount - 1].className = "normalblue event";
    		            }
    		            
    		            spanEvent.className = "sunro1gray event";
    		        }
    		        
		           /* if(tdContainer.getElementsByTagName("DIV").length < 19 )
		            {*/
			            spanEvent.appendChild(this.getEventTitle(objEvent));
                        tdContainer.appendChild(spanEvent);
                        
                        divDivider.className = "divcaldivider";
		                divDivider.innerHTML = "&nbsp;";
		                tdContainer.appendChild(divDivider);
		            /*}
		            else if(tdContainer.getElementsByTagName("DIV").length < 20 )
		            {
			            var aMore = document.createElement('A');
			            aMore.innerHTML = "More...";
			            aMore.setAttribute("date", eventDate.getDate());
			            aMore.href = "javascript:void(0);";
			            
			            var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), eventDate.getDate(), this.get_displayMonth(),  this.get_displayYear());
                        $addHandler(aMore, 'click', Function.createCallback(this._dateSelectedDelegate, calendarEventArgs));
			            
			            spanEvent.appendChild(aMore);
			            tdContainer.appendChild(spanEvent);
		            }*/
		        }
    			
		    }
    	
	    }
    },
    
    renderEventsForYear: function()
    {
    },
    
    renderEventsForWeek: function()
    {
	    var dataSource = this.get_dataSource();
	    var intLoop,intOuterLoop;
	    var spanTemp;
	    var temp;
	    var left = 20; 
	    var top = 0;

	    if(dataSource != null)
	    {
		    var intTotalCount;
		    var objEvent;
		    var dd = new Date();
    		    		
		    intTotalCount = dataSource.length;
    	
		    for(intIndex = 0; intIndex <= intTotalCount - 1; intIndex++)
		    {
			    objEvent = dataSource[intIndex];
    	
		        var starttime = objEvent.StartTime;
		        var eventDate = new Date(objEvent.StartDate);
		        
		        var cellId = "tdWView_" + Replace(getFormmatedDate(eventDate), "/","_");
		        var rowId = "trWView_" + Replace(getFormmatedDate(eventDate), "/","_");
		        var spanEvent = document.createElement("DIV");
		        var divDivider = document.createElement("DIV");
		        var tdContainer = document.getElementById(cellId);
		        var dayEventCount, dayEvents;
    		    
		        if(tdContainer != null)
		        {
		            dayEvents = getElementsByClassName(tdContainer, "event");
		            dayEventCount = dayEvents.length;
		        
		            if(dayEventCount % 2 == 0)
    		        {
    		            if(dayEventCount > 0)
    		            {
    		                dayEvents[dayEventCount - 1].className = "normalgray event";
    		            }
    		            
    		            spanEvent.className = "sunro1blue event"; 
    		        }
    		        else
    		        {
    		            if(dayEventCount > 0)
    		            {
    		                dayEvents[dayEventCount - 1].className = "normalblue event";
    		            }
    		            
    		            spanEvent.className = "sunro1gray event";
    		        }
    		    
			        /*if(tdContainer.getElementsByTagName("DIV").length < 19 )
		            {*/
			            spanEvent.appendChild(this.getEventTitle(objEvent));
			            tdContainer.appendChild(spanEvent);
			            
	                    divDivider.className = "divcaldivider";
		                divDivider.innerHTML = "&nbsp;";
		                tdContainer.appendChild(divDivider);
		            /*}
		            else if(tdContainer.getElementsByTagName("DIV").length < 20 )
		            {
			            var aMore = document.createElement('A');
			            aMore.innerHTML = "More...";
			            aMore.href = "javascript:void(0);";
			            aMore.className = "linksmore";
					    aMore.setAttribute("displayyear", eventDate.getFullYear());
                        aMore.setAttribute("displaymonth", eventDate.getMonth() + 1);
                        aMore.setAttribute("displaydate", eventDate.getDate());
                        
                        var calendarEventArgs = new WINIT.AJAXControls.EventsCalendarEventArgs(this.get_displayMode(), eventDate.getDate(), eventDate.getMonth() + 1, eventDate.getFullYear());
                        $addHandler(aMore, 'click', Function.createCallback(this._dateSelectedDelegate, calendarEventArgs));
                                
			            spanEvent.appendChild(aMore);
			            tdContainer.appendChild(spanEvent);
		            }*/

		        }
    			
		    }
    	
	    }
	    
    },
    
    renderEventsForDay: function()
    {
	    var element = this.get_element();
	    var dataSource = this.get_dataSource();
	    var intLoop,intOuterLoop;
	    var tbodyTemp;
	    var trTemp;
	    var tdTemp;

	    if(dataSource != null)
	    {
		    var intTotalCount;
		    var objEvent;
    		
		    intTotalCount = dataSource.length;
    	    var tbodyTemp =  document.getElementById("tbodyDateViewDetails");
    	    
    	    if(tbodyTemp != null)
	        {
	            for(intIndex = 0; intIndex <= intTotalCount - 1; intIndex++)
		        {
	                objEvent = dataSource[intIndex];
	                trTemp = document.createElement('TR');
                    tdTemp = document.createElement('TD');
                    
                    tdTemp.className = (intIndex % 2 == 0)? "dayviewcol2 dayviewcol2bg": "dayviewcol2 dayviewcol2alterbg";
                    
                    if(objEvent.AllDayEvent == true)
                    {
                        tdTemp.innerHTML = "(all day event)";
                    }
                    else
                    {
                        tdTemp.innerHTML = objEvent.StartTime + " - " + objEvent.EndTime;
                    }
                    
                    trTemp.appendChild(tdTemp);
            	    
                    tdTemp = document.createElement('TD');
                    tdTemp.className = (intIndex % 2 == 0)? "dayviewcol3 dayviewcol3bg": "dayviewcol3 dayviewcol3alterbg";
                   
                    tdTemp.appendChild(this.getEventTitle(objEvent));
                    
                    if(intIndex % 2 == 0)
                    {
                        tdTemp.onmouseover = function(){this.className = "dayviewcol3 dayviewcol3overbg";};
                        tdTemp.onmouseout = function(){this.className = "dayviewcol3 dayviewcol3bg";};
                    }
                    else
                    {
                        tdTemp.onmouseover = function(){this.className = "dayviewcol3 dayviewcol3overbg";};
                        tdTemp.onmouseout = function(){this.className = "dayviewcol3 dayviewcol3alterbg";};
                    }
                    
                    trTemp.appendChild(tdTemp);
            	    
                    tbodyTemp.appendChild(trTemp);	
		        }
	        }
	    }
    }
    
}

WINIT.AJAXControls.EventsCalendar.registerClass('WINIT.AJAXControls.EventsCalendar', Sys.UI.Control);
