//created on sep 14 2012 Date.prototype.getWeek = function (dowOffset) { /*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.epoch-calendar.com */ dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero var newYear = new Date(this.getFullYear(),0,1); var day = newYear.getDay() - dowOffset; //the day of week the year begins on day = (day >= 0 ? day : day + 7); var daynum = Math.floor((this.getTime() - newYear.getTime() - (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1; var weeknum; //if the year starts before the middle of a week if(day < 4) { weeknum = Math.floor((daynum+day-1)/7) + 1; if(weeknum > 52) { nYear = new Date(this.getFullYear() + 1,0,1); nday = nYear.getDay() - dowOffset; nday = nday >= 0 ? nday : nday + 7; /*if the next year starts before the middle of the week, it is week #1 of that year*/ weeknum = nday < 4 ? 1 : 53; } } else { weeknum = Math.floor((daynum+day-1)/7); } return weeknum; }; var calendarAPI = function(){ c = this; this.event_create_div = $("#event_create"); this.event_quick_view_div = $("#event_quick_view"); this.today = new Date(); this.cur_month = c.today.getMonth()+1; this.cur_year = c.today.getFullYear(); this.cur_week = c.today.getWeek(); this.view = null; this.monthlist = ["","January","February","March","April","May","June","July","August","September","October","November","December"]; this.initialize = function(){ $(window).load(function(){ // c.loadMonthView(c.cur_month,c.cur_year); c.loadWeekView(51,c.cur_year); bindHandlers(); }) var bindHandlers = function(){ $(".event").live("click",function(){ c.displayEvent($(this)); }) $("#create_event_btn").click(function(){ if(!$(this).hasClass("active")){ c.newEvent($(this).attr("href"),$(this).attr("ref"),c.today.getDate(),c.today.getMonth()+1,c.today.getFullYear()); }else{ c.event_create_div.hide().empty(); } $(this).toggleClass("active"); return false; }) $("td.click_event").live("click",function(){ c.newEvent($(this).attr("link"),$(this).attr("ref"),$(this).attr("date"),c.cur_month,c.cur_year); $("#create_event_btn").toggleClass("active"); }) $('.mode_switch').click(function(){ var target = $(this).text(); switch(target){ case 'month': c.loadMonthView(c.cur_month,c.cur_year); break; case 'week': c.loadWeekView(c.cur_week,c.cur_year); break; case 'day': c.loadDayView(); break; case 'agenda': c.loadAgendaView(); break; } }) $("button#prev_month_btn").click(function(){ switch (c.view){ case "month": var m,y; if(c.cur_month == 1){ m = 12; y = c.cur_year-1; }else{ m = c.cur_month-1; y = c.cur_year; } c.loadMonthView(m,y); break; case "week": var w,y; w = c.cur_week - 1; y = c.cur_year; c.loadWeekView(w,y); break; } }) $("button#next_month_btn").click(function(){ switch (c.view){ case "month": var m,y; if(c.cur_month == 12){ m = 1; y = c.cur_year+1; }else{ m = c.cur_month+1; y = c.cur_year; } c.loadMonthView(m,y); break; case "week": var w,y; if(c.cur_week == 52){ w = 2; y = c.cur_year + 1; }else{ w = c.cur_week + 1; y = c.cur_year; } c.loadWeekView(w,y); break; } }) $("button#today_btn").click(function(){ c.loadMonthView(); }) } } this.loadMonthView = function(month,year){ c.view = "month"; if(!month){ var dt = new Date(); month = dt.getMonth()+1; year = dt.getFullYear(); } // month = 10; // year = 2008; c.cur_month = month; c.cur_year = year; $('#view_holder').load("cals/month_view?month="+month+"&year="+year, function() { c.getEventsForMonth(month,year); $('.current_day_title').text(c.monthlist[c.cur_month]+" "+c.cur_year); if($('#calendar_month').length > 0){ var $c_table = $('#calendar_month'); var sum_h = 0; var context_h = $('#main-sidebar').outerHeight(); $('#main-wrap > *').not('#orbit_calendar, .modal').each(function(){ sum_h += $(this).outerHeight(); }); $c_table // .height(context_h-sum_h-64) .find('.month_row') .not('.month_row.header') .height((context_h-sum_h-92) / 6); $(window).resize(function(){ $c_table .find('.month_row') .not('.month_row.header') .height(($('#main-sidebar').outerHeight()-sum_h-92) / 6); }); } }) } this.getEventsForMonth = function(month,year){ $.getJSON("cals/getEvents",{"type":"monthview","month":month,"year":year},function(events){ makerow(events); }) var doneEventArray = new Array(); var makerow = function(events){ var $eventrow =null; var currow = 0; var curdate = 0; var allow = false; var curparent = null; var lastno = 0; var indexcount = events.length; $.each(events,function(i,evnt){ indexcount++; if($.inArray(evnt.index,doneEventArray) == -1){ var daydom = $("#calendar_month td[date="+evnt.start_date+"]"); var thisparent = daydom.parent().parent().parent(); var thisrow = thisparent.attr("row"); var pos = parseInt(daydom.attr("position")); var thisno = daydom.attr("no"); if(thisrow != currow){ if(curparent){ curparent.append($eventrow); } $eventrow = null; $eventrow = $("