﻿var pageSize = 10;
var currentPage = 1;

var app = Sys.Application;
app.add_load(applicationLoadHandler);

function applicationLoadHandler(sender, args) {
if($find("tdDay") == null)
{
    var curDate;
	curDate = new Date();
    var Calendar= $create(
        WINIT.AJAXControls.EventsCalendar,  // Type
        {
            displayMode: displayMode[2],
            displayMonth: curDate.getMonth() + 1,
	        displayYear: curDate.getFullYear(),
	        displayDate: curDate.getDate(),
	        dayStartTime: 420,
	        dayEndTime: 1110
        },                                 // Properties
        {
            dateSelected: DateSelected,
            monthSelected: MonthSelected,
            deleteEvent: DeleteEvent,
            viewEvent: ViewEvent,
            editEvent: EditEvent,
            downloadEvent: DownloadEvent
        },                                    // Events
        null,                                 // References
        $get("tdDay"));              // Element
        
    // Wire up the add new context button click event handler
    $addHandler($get('ADayView'), 'click', ShowDay);
    $addHandler($get('AweekView'), 'click', ShowWeek);
    $addHandler($get('AmonthView'), 'click', ShowMonth);
    
    $addHandler($get('lnkPrevious'), 'click', PreviousPeriod);
    $addHandler($get('lnkNext'), 'click', NextPeriod);
    highlightCurrentTab(displayMode[3]);
    
    //Calendar.renderCalendar();
    ShowWeek();
    //GetEvents();
}
}

function getTime(cboHours, cboMins, cboPeriod)
{
    var time = 0;
    time = parseInt(getDropdownText(cboHours), 10);
    
    if(getDropdownText(cboPeriod).toUpperCase() == "PM")
    {
        time = (time == 12)? 12: (time + 12);
    }
    else if(time == 12)
    {
        time = 24;
    }
    
    time = (time * 60) + parseInt(getDropdownText(cboMins));
    
    return time
}

function GetEvents()
{  
    var Calendar = $find("tdDay");
    var ViewType = Calendar.get_displayMode();   
    var EventDate;
    var CurrentDate = new Date();
    var UserId = parseInt($get("ctl00_cphContent_hdnUsrId").value);
    var SchoolId = parseInt($get("ctl00_cphContent_hidSchooId").value);
    var DepartmentId = parseInt(getDropdownValue($get("ctl00_cphContent_cboDepartments")));
    
    Calendar.set_dataSource(null);
   
    switch(ViewType.toLowerCase())
    {
        case "year":
           EventDate = "1/1/" + Calendar.get_displayYear();
           break;
        case "week":
           EventDate = Calendar.getWeeksStartDate();
           break;
        case "month":
           EventDate = Calendar.get_displayMonth() + "/1/" + Calendar.get_displayYear();
           break;
        default:
           EventDate = Calendar.get_displayMonth() + "/" + Calendar.get_displayDate() + "/" + Calendar.get_displayYear();
           break;
    }
 
    displayProgress(true);
    GDB.Services.GDBEvents.GetEventsForCalendar(SchoolId, UserId, DepartmentId, EventDate, ViewType,CurrentDate.toString(), onSuccess, onFailure, Calendar);
    
}

function onSuccess(result, context)
{
    var Events = result;
    
    if(Events != null)
    {
        if(Events.length > 0)
        {      
       //alert(Events.length);
            context.set_dataSource(Events);
            context.renderEvents();
        }
    }
    
    displayProgress(false);
}

function onFailure(result, context)
{

    alert(result.get_message());

    displayProgress(false);
}


function DeleteEventFromList(EventId)
{  
    var CurrentDate = new Date();
 
    displayProgress(true);
    GDB.Services.GDBEvents.DeleteEvent(EventId,CurrentDate.toString(), onSuccessDelete, onFailureDelete, EventId);
    
}

function onSuccessDelete(result, context)
{
    var rows = result;
    
    if(rows > 0)
    {      
        $get("spnMessage").innerHTML = "Successfully deleted the event.";
        displayConfirmation(true);
        RebindEvents();
    }
    else
    {
        $get("spnMessage").innerHTML = "Error while deleting the event.";
        displayConfirmation(true);
    }
    
    //displayProgress(false);
}

function onFailureDelete(result, context)
{
    $get("spnMessage").innerHTML = "Error while deleting the event.";
    displayConfirmation(true);
}

function ShowToday()
{

    var Calendar = $find("tdDay");
    
    Calendar.set_displayMode(displayMode[0]);
    Calendar.renderCalendar();
    
    //GetEvents();
}

function ShowDay()
{
    var Calendar = $find("tdDay");
    
    DisplayText(Calendar, "day");
    
    Calendar.set_displayMode(displayMode[1]);
    highlightCurrentTab(displayMode[1]);
    
    Calendar.renderCalendar();
    
    GetEvents();
    return false;
}

function ShowWeek()
{
    var Calendar = $find("tdDay");
    
    DisplayText(Calendar, "week");

    Calendar.set_displayMode(displayMode[2]);
    highlightCurrentTab(displayMode[2]);
    
    Calendar.renderCalendar();
   
    GetEvents();
    return false;
}

function ShowMonth()
{   
    var Calendar = $find("tdDay");
    
    DisplayText(Calendar, "month");
    
    Calendar.set_displayMode(displayMode[3]);
    highlightCurrentTab(displayMode[3]);
     
    Calendar.renderCalendar();
    
    GetEvents();
    return false;
}

function ShowYear()
{
    var Calendar = $find("tdDay");
    
    Calendar.set_displayMode(displayMode[4]);
    Calendar.renderCalendar();
    
    //GetEvents();
}

function NextMonth(sender, args)
{
    var Calendar = $find("tdDay");
    
    Calendar.set_displayMode(displayMode[3]);
    Calendar.set_displayDate(args.get_displayDate());
    Calendar.set_displayMonth(args.get_displayMonth());
    Calendar.set_displayYear(args.get_displayYear());
    
    ShowMonth();
}

function PreviousMonth(sender, args)
{
    var Calendar = $find("tdDay");
    
    Calendar.set_displayMode(displayMode[3]);
    Calendar.set_displayDate(args.get_displayDate());
    Calendar.set_displayMonth(args.get_displayMonth());
    Calendar.set_displayYear(args.get_displayYear());
    
    ShowMonth();
}

function DateSelected(sender, args)
{
    var Calendar = $find("tdDay");
    
    Calendar.set_displayDate(args.get_displayDate());
    Calendar.set_displayMonth(args.get_displayMonth());
    Calendar.set_displayYear(args.get_displayYear());
    Calendar.set_displayMode(displayMode[1]);
    ShowDay();
}


function MonthSelected(sender, args)
{
    var Calendar = $find("tdDay");
    
    Calendar.set_displayDate(args.get_displayDate());
    Calendar.set_displayMonth(args.get_displayMonth());
    Calendar.set_displayYear(args.get_displayYear());
    Calendar.set_displayMode(displayMode[3]);
    
    ShowMonth();
}

// Utility methods to show/hide UpdateProgress
// on the page
function ShowUpdateProgress() {
    var progress= $get("UpdateProgress");
    if (progress) {
        progress.style.visible = "visivle";
        progress.style.display= "block";
    }
}

function HideUpdateProgress() {
    var progress= $get("UpdateProgress");
    if (progress) {
        progress.style.visible= "hidden";
        progress.style.display= "none";
    }
}

function highlightCurrentTab(displayMode)
{
    $get("ADayView").className = "home";
    $get("AweekView").className = "home";
    $get("AmonthView").className = "home";
    
    switch(displayMode.toLowerCase())
    {
        case "week":
            $get("AweekView").className = "homestatic";
            break;
        case "day":
            $get("ADayView").className = "homestatic";
            break;
        default:
            $get("AmonthView").className = "homestatic";
            break;
    }
    
    return false;
}

function PreviousPeriod()
{
    var Calendar = $find("tdDay");
    var startDate = new Date(Calendar.get_displayMonth() + "/" + Calendar.get_displayDate() + "/" + Calendar.get_displayYear());
    var newDate;

    switch(Calendar.get_displayMode().toLowerCase())
    {
        case "week":
                startDate = addDays(startDate, -startDate.getDay());
                newDate = addDays(startDate, -7); 
                
                Calendar.set_displayDate(newDate.getDate());
                Calendar.set_displayMonth(newDate.getMonth() + 1);
                Calendar.set_displayYear(newDate.getFullYear()); 
                ShowWeek();
                break;
        case "day":
                newDate = addDays(startDate, -1); 

                Calendar.set_displayDate(newDate.getDate());
                Calendar.set_displayMonth(newDate.getMonth() + 1);
                Calendar.set_displayYear(newDate.getFullYear()); 
                ShowDay();
                break;
        default:
        
                Calendar.set_displayDate(1);
                newDate = startDate;
                
                if(startDate.getMonth() > 0)
                {
                    Calendar.set_displayMonth(newDate.getMonth());
                    Calendar.set_displayYear(newDate.getFullYear()); 
                }
                else
                {
                    Calendar.set_displayMonth(12);
                    Calendar.set_displayYear(newDate.getFullYear() - 1);               
                }
                
                ShowMonth();
                break;  
    }
}

function NextPeriod()
{
    var Calendar = $find("tdDay");
    var startDate = new Date(Calendar.get_displayMonth() + "/" + Calendar.get_displayDate() + "/" + Calendar.get_displayYear());
    var newDate;

    switch(Calendar.get_displayMode().toLowerCase())
    {
        case "week":
                startDate = addDays(startDate, -startDate.getDay());
                newDate = addDays(startDate, 7); 
                
                Calendar.set_displayDate(newDate.getDate());
                Calendar.set_displayMonth(newDate.getMonth() + 1);
                Calendar.set_displayYear(newDate.getFullYear()); 
                ShowWeek();
                break;
        case "day":
                newDate = addDays(startDate, 1); 

                Calendar.set_displayDate(newDate.getDate());
                Calendar.set_displayMonth(newDate.getMonth() + 1);
                Calendar.set_displayYear(newDate.getFullYear()); 
                ShowDay();
                break;
        default:
       
                Calendar.set_displayDate(1);
                newDate = startDate;
                
                if(startDate.getMonth() < 11)
                {
                    Calendar.set_displayMonth(newDate.getMonth() + 2);
                    Calendar.set_displayYear(newDate.getFullYear()); 
                }
                else
                {
                    Calendar.set_displayMonth(1);
                    Calendar.set_displayYear(newDate.getFullYear() + 1);               
                }
                
                ShowMonth();        
                break;  
    }

} 

function DisplayText(Calendar, displayMode)
{
    var startDate = new Date(Calendar.get_displayMonth() + "/"+ Calendar.get_displayDate() + "/" + Calendar.get_displayYear());
    var endDate;
    
    $get("cboDate").style.display = "";
    
    switch(displayMode.toLowerCase())
    {
        case "week":
            startDate = addDays(startDate, -startDate.getDay());
            endDate = addDays(startDate, 6); 
            
            $get("spanDuration").innerHTML = weekArray[startDate.getDay()] + ", " + monthArray[startDate.getMonth()] + " " + startDate.getDate() + ", " + startDate.getFullYear();
            $get("spanDuration").innerHTML += " - ";
            $get("spanDuration").innerHTML += weekArray[endDate.getDay()] + ", " + monthArray[endDate.getMonth()] + " " + endDate.getDate() + ", " + endDate.getFullYear();
            
            $get("divDuration").innerHTML = "Week of " + monthArray[startDate.getMonth()] + " " + startDate.getDate() + ", " + startDate.getFullYear();
            
            $get("spanViewMode").innerHTML = "Events Calendar » Week";
            break;
        case "day":
            $get("spanDuration").innerHTML = weekArray[startDate.getDay()] + ", " + monthArray[startDate.getMonth()] + " " + startDate.getDate() + ", " + startDate.getFullYear();
            $get("divDuration").innerHTML = weekArray[startDate.getDay()] + ", " + monthArray[startDate.getMonth()] + " " + startDate.getDate() + ", " + startDate.getFullYear();
            
            $get("spanViewMode").innerHTML = "Events Calendar » Day";
            break;
        default:
            startDate = new Date(Calendar.get_displayMonth() + "/1/" + Calendar.get_displayYear());
            endDate = addDays(startDate, noDaysArray[Calendar.get_displayMonth() - 1] - 1); 
            $get("spanDuration").innerHTML = weekArray[startDate.getDay()] + ", " + monthArray[startDate.getMonth()] + " " + startDate.getDate() + ", " + startDate.getFullYear();
            $get("spanDuration").innerHTML += " - ";
            $get("spanDuration").innerHTML += weekArray[endDate.getDay()] + ", " + monthArray[endDate.getMonth()] + " " + endDate.getDate() + ", " + endDate.getFullYear();
            
            $get("divDuration").innerHTML = monthArray[startDate.getMonth()] + ", " + startDate.getFullYear();
            
            $get("spanViewMode").innerHTML = "Events Calendar » Month";
            
            $get("cboDate").style.display = "none";
            break;
    }
    
    setDropdownValue($get("cboMonth"), startDate.getMonth() + 1);
    setDropdownValue($get("cboDate"), startDate.getDate());
    $get("txtYear").value = startDate.getFullYear();
}

function FindByDate()
{
    var strDate = "";
    var Calendar = $find("tdDay");
    var viewMode = Calendar.get_displayMode().toLowerCase();
    
    if(viewMode != "month")
    {
        strDate = getDropdownValue($get("cboMonth"));
        strDate += "/" + getDropdownValue($get("cboDate"));
        strDate += "/" + $get("txtYear").value;
    }
    else
    {
        strDate = getDropdownValue($get("cboMonth"));
        strDate += "/" + "1";
        strDate += "/" + $get("txtYear").value;
    }
    
    if(ValidateDate(strDate) == true)
    {
        var newDate = new Date(strDate);
        Calendar.set_displayDate(newDate.getDate());
        Calendar.set_displayMonth(newDate.getMonth() + 1)
        Calendar.set_displayYear(newDate.getFullYear()); 
        
        DisplayText(Calendar, viewMode);
        Calendar.renderCalendar();
        GetEvents();
    }
}

function ValidateDate(dateValue)
{
    var validformat=/^\d{1,2}\/\d{1,2}\/\d{4}$/ //Basic check for format validity
    var returnval=false
    if (!validformat.test(dateValue))
    {
        alert("Invalid Date Format. Please correct and submit again.");
    }
    else
    { //Detailed check for valid date ranges
        var monthfield=dateValue.split("/")[0]
        var dayfield=dateValue.split("/")[1]
        var yearfield=dateValue.split("/")[2]
        var dayobj = new Date(yearfield, monthfield-1, dayfield)
        
        if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
        {
            alert("Invalid Day, Month, or Year range detected. Please correct and submit again.");
        }
        else
        {
            returnval=true;
        }
    }
   
    return returnval
}

function FilterEvents()
{
    var Calendar = $find("tdDay");
    Calendar.renderCalendar();
    GetEvents();
}

function ViewEvent(sender, args)
{  
   
    if(args.get_isPublic() == true)
    {

          document.getElementById('ctl00_cphContent_hdneventid').value="";
          document.getElementById('ctl00_cphContent_hdneventid').value=args.get_eventId(); 
                
          __doPostBack('ctl00$cphContent$lnkViewDetails','');       
    }
   
 
}

function openViewEvent()
{  
    __doPostBack('ctl00$cphContent$lnkViewDetails','');   
}

function EditEvent(sender, args)
{  

   //pratap starts
    if(args.get_isPublic() == false)
    {      
       document.getElementById('ctl00_cphContent_hdneventid').value=args.get_eventId();                        
           
       __doPostBack('ctl00$cphContent$lnkupdateView','');      
    }
   
   
   
}

function DeleteEvent(sender, args)
{
    if(confirm("Are you sure to delete this event") == true)
    {
        DeleteEventFromList(args.get_eventId());
    }
}   

function DownloadEvent(sender, args)
{
  document.getElementById('ctl00_cphContent_hdneventid').value=args.get_eventId();
    
    var EventId=args.get_eventId();
    
    if(args.get_isPublic() == false)
    {
       window.open ("../ExportToCalendar.aspx?eid=" + EventId + "&etype=0","mywindow");
    }    
    else
    {
        window.open ("../ExportToCalendar.aspx?eid=" + EventId + "&etype=1","mywindow");
    }  
}


function RebindEvents()
{
    var Calendar = $find("tdDay");
    
    Calendar.renderCalendar();
    GetEvents();
}


