var jqcalendar_dovolenka = {525:"-2", 526:"401", 557:"401", 4913:"-2"};/**
* @description {Class} wdCalendar
* This is the main class of wdCalendar.
*/
; (function($) {
var __WDAY = new Array(i18n.xgcalendar.dateformat.sun, i18n.xgcalendar.dateformat.mon, i18n.xgcalendar.dateformat.tue, i18n.xgcalendar.dateformat.wed, i18n.xgcalendar.dateformat.thu, i18n.xgcalendar.dateformat.fri, i18n.xgcalendar.dateformat.sat);
var __MonthName = new Array(i18n.xgcalendar.dateformat.jan, i18n.xgcalendar.dateformat.feb, i18n.xgcalendar.dateformat.mar, i18n.xgcalendar.dateformat.apr, i18n.xgcalendar.dateformat.may, i18n.xgcalendar.dateformat.jun, i18n.xgcalendar.dateformat.jul, i18n.xgcalendar.dateformat.aug, i18n.xgcalendar.dateformat.sep, i18n.xgcalendar.dateformat.oct, i18n.xgcalendar.dateformat.nov, i18n.xgcalendar.dateformat.dec);
if (!Clone || typeof (Clone) != "function") {
var Clone = function(obj) {
var objClone = new Object();
if (obj.constructor == Object) {
objClone = new obj.constructor();
} else {
objClone = new obj.constructor(obj.valueOf());
}
for (var key in obj) {
if (objClone[key] != obj[key]) {
if (typeof (obj[key]) == 'object') {
objClone[key] = Clone(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
objClone.toString = obj.toString;
objClone.valueOf = obj.valueOf;
return objClone;
}
}
if (!dateFormat || typeof (dateFormat) != "function") {
var dateFormat = function(format) {
var o = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"H+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"w": "0123456".indexOf(this.getDay()),
"W": __WDAY[this.getDay()],
"L": __MonthName[this.getMonth()] //non-standard
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
return format;
};
}
if (!DateAdd || typeof (DateDiff) != "function") {
var DateAdd = function(interval, number, idate) {
number = parseInt(number);
var date;
if (typeof (idate) == "string") {
date = idate.split(/\D/);
eval("var date = new Date(" + date.join(",") + ")");
}
if (typeof (idate) == "object") {
date = new Date(idate.toString());
}
switch (interval) {
case "y": date.setFullYear(date.getFullYear() + number); break;
case "m": date.setMonth(date.getMonth() + number); break;
case "d": date.setDate(date.getDate() + number); break;
case "w": date.setDate(date.getDate() + 7 * number); break;
case "h": date.setHours(date.getHours() + number); break;
case "n": date.setMinutes(date.getMinutes() + number); break;
case "s": date.setSeconds(date.getSeconds() + number); break;
case "l": date.setMilliseconds(date.getMilliseconds() + number); break;
}
return date;
}
}
if (!DateDiff || typeof (DateDiff) != "function") {
var DateDiff = function(interval, d1, d2) {
switch (interval) {
case "d": //date
case "w":
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate());
d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate());
break; //w
case "h":
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate(), d1.getHours());
d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate(), d2.getHours());
break; //h
case "n":
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate(), d1.getHours(), d1.getMinutes());
d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate(), d2.getHours(), d2.getMinutes());
break;
case "s":
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate(), d1.getHours(), d1.getMinutes(), d1.getSeconds());
d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate(), d2.getHours(), d2.getMinutes(), d2.getSeconds());
break;
}
var t1 = d1.getTime(), t2 = d2.getTime();
var diff = NaN;
switch (interval) {
case "y": diff = d2.getFullYear() - d1.getFullYear(); break; //y
case "m": diff = (d2.getFullYear() - d1.getFullYear()) * 12 + d2.getMonth() - d1.getMonth(); break; //m
case "d": diff = Math.floor(t2 / 86400000) - Math.floor(t1 / 86400000); break;
case "w": diff = Math.floor((t2 + 345600000) / (604800000)) - Math.floor((t1 + 345600000) / (604800000)); break; //w
case "h": diff = Math.floor(t2 / 3600000) - Math.floor(t1 / 3600000); break; //h
case "n": diff = Math.floor(t2 / 60000) - Math.floor(t1 / 60000); break; //
case "s": diff = Math.floor(t2 / 1000) - Math.floor(t1 / 1000); break; //s
case "l": diff = t2 - t1; break;
}
return diff;
}
}
if ($.fn.noSelect == undefined) {
$.fn.noSelect = function(p) { //no select plugin by me :-)
if (p == null)
prevent = true;
else
prevent = p;
if (prevent) {
return this.each(function() {
if ($.browser.msie || $.browser.safari) $(this).bind('selectstart', function() { return false; });
else if ($.browser.mozilla) {
$(this).css('MozUserSelect', 'none');
$('body').trigger('focus');
}
else if ($.browser.opera) $(this).bind('mousedown', function() { return false; });
else $(this).attr('unselectable', 'on');
});
} else {
return this.each(function() {
if ($.browser.msie || $.browser.safari) $(this).unbind('selectstart');
else if ($.browser.mozilla) $(this).css('MozUserSelect', 'inherit');
else if ($.browser.opera) $(this).unbind('mousedown');
else $(this).removeAttr('unselectable', 'on');
});
}
}; //end noSelect
}
$.fn.bcalendar = function(option) {
var def = {
/**
* @description {Config} view
* {String} Three calendar view provided, 'day','week','month'. 'week' by default.
*/
view: "month",
/**
* @description {Config} weekstartday
* {Number} First day of week 0 for Sun, 1 for Mon, 2 for Tue.
*/
weekstartday: 1, //start from Monday by default
theme: 0, //theme no
/**
* @description {Config} height
* {Number} Calendar height, false for page height by default.
*/
height: false,
/**
* @description {Config} url
* {String} Url to request calendar data.
*/
url: "",
/**
* @description {Config} eventItems
* {Array} event items for initialization.
*/
eventItems: [],
method: "POST",
/**
* @description {Config} showday
* {Date} Current date. today by default.
*/
showday: new Date(),
/**
* @description {Event} onBeforeRequestData:function(stage)
* Fired before any ajax request is sent.
* @param {Number} stage. 1 for retrieving events, 2 - adding event, 3 - removiing event, 4 - update event.
*/
onBeforeRequestData: false,
/**
* @description {Event} onAfterRequestData:function(stage)
* Fired before any ajax request is finished.
* @param {Number} stage. 1 for retrieving events, 2 - adding event, 3 - removiing event, 4 - update event.
*/
onAfterRequestData: false,
/**
* @description {Event} onAfterRequestData:function(stage)
* Fired when some errors occur while any ajax request is finished.
* @param {Number} stage. 1 for retrieving events, 2 - adding event, 3 - removiing event, 4 - update event.
*/
onRequestDataError: false,
onWeekOrMonthToDay: false,
/**
* @description {Event} quickAddHandler:function(calendar, param )
* Fired when user quick adds an item. If this function is set, ajax request to quickAddUrl will abort.
* @param {Object} calendar Calendar object.
* @param {Array} param Format [{name:"name1", value:"value1"}, ...]
*
*/
quickAddHandler: false,
/**
* @description {Config} quickAddUrl
* {String} Url for quick adding.
*/
quickAddUrl: "",
/**
* @description {Config} quickUpdateUrl
* {String} Url for time span update.
*/
quickUpdateUrl: "",
/**
* @description {Config} quickDeleteUrl
* {String} Url for removing an event.
*/
quickDeleteUrl: "",
/**
* @description {Config} autoload
* {Boolean} If event items is empty, and this param is set to true.
* Event will be retrieved by ajax call right after calendar is initialized.
*/
autoload: false,
/**
* @description {Config} readonly
* {Boolean} Indicate calendar is readonly or editable
*/
readonly: false,
/**
* @description {Config} extParam
* {Array} Extra params submitted to server.
* Sample - [{name:"param1", value:"value1"}, {name:"param2", value:"value2"}]
*/
extParam: [],
/**
* @description {Config} enableDrag
* {Boolean} Whether end user can drag event item by mouse.
*/
enableDrag: true,
loadDateR: []
};
var eventDiv = $("#gridEvent");
if (eventDiv.length == 0) {
eventDiv = $("
").appendTo(document.body);
}
var gridcontainer = $(this);
option = $.extend(def, option);
//no quickUpdateUrl, dragging disabled.
if (option.quickUpdateUrl == null || option.quickUpdateUrl == "") {
option.enableDrag = false;
}
//template for month and date
var __SCOLLEVENTTEMP = "${data}
${starttime} - ${endtime} ${icon} ${content}
";
var __ALLDAYEVENTTEMP = '';
var __MonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var __LASSOTEMP = "
";
//for dragging var
var _dragdata;
var _dragevent;
//clear DOM
clearcontainer();
//no height specified in options, we get page height.
if (!option.height) {
option.height = document.documentElement.clientHeight;
}
//
gridcontainer.css("overflow-y", "visible").height(option.height - 8);
//populate events data for first display.
if (option.url && option.autoload) {
populate();
}
else {
//contruct HTML
render();
//get date range
var d = getRdate();
pushER(d.start, d.end);
}
//clear DOM
function clearcontainer() {
gridcontainer.empty();
}
//get range
function getRdate() {
return { start: option.vstart, end: option.vend };
}
//add date range to cache.
function pushER(start, end) {
var ll = option.loadDateR.length;
if (!end) {
end = start;
}
if (ll == 0) {
option.loadDateR.push({ startdate: start, enddate: end });
}
else {
for (var i = 0; i < ll; i++) {
var dr = option.loadDateR[i];
var diff = DateDiff("d", start, dr.startdate);
if (diff == 0 || diff == 1) {
if (dr.enddate < end) {
dr.enddate = end;
}
break;
}
else if (diff > 1) {
var d2 = DateDiff("d", end, dr.startdate);
if (d2 > 1) {
option.loadDateR.splice(0, 0, { startdate: start, enddate: end });
}
else {
dr.startdate = start;
if (dr.enddate < end) {
dr.enddate = end;
}
}
break;
}
else {
var d3 = DateDiff("d", end, dr.startdate);
if (dr.enddate < end) {
if (d3 < 1) {
dr.enddate = end;
break;
}
else {
if (i == ll - 1) {
option.loadDateR.push({ startdate: start, enddate: end });
}
}
}
}
}
//end for
//clear
ll = option.loadDateR.length;
if (ll > 1) {
for (var i = 0; i < ll - 1; ) {
var d1 = option.loadDateR[i];
var d2 = option.loadDateR[i + 1];
var diff1 = DateDiff("d", d2.startdate, d1.enddate);
if (diff1 <= 1) {
d1.startdate = d2.startdate > d1.startdate ? d1.startdate : d2.startdate;
d1.enddate = d2.enddate > d1.enddate ? d2.enddate : d1.enddate;
option.loadDateR.splice(i + 1, 1);
ll--;
continue;
}
i++;
}
}
}
}
//contruct DOM
function render() {
//params needed
//viewType, showday, events, config
var showday = new Date(option.showday.getFullYear(), option.showday.getMonth(), option.showday.getDate());
var events = option.eventItems;
var config = { view: option.view, weekstartday: option.weekstartday, theme: option.theme };
if (option.view == "day" || option.view == "week") {
var $dvtec = $("#dvtec");
if ($dvtec.length > 0) {
option.scoll = $dvtec.attr("scrollTop"); //get scroll bar position
}
}
switch (option.view) {
case "day":
BuildDaysAndWeekView(showday, 1, events, config);
break;
case "week":
BuildDaysAndWeekView(showday, 7, events, config);
break;
case "month":
BuildMonthView(showday, events, config);
break;
default:
alert(i18n.xgcalendar.no_implement);
break;
}
initevents(option.view);
ResizeView();
}
//build day view
function BuildDaysAndWeekView(startday, l, events, config) {
var days = [];
if (l == 1) {
var show = dateFormat.call(startday, i18n.xgcalendar.dateformat.Md);
days.push({ display: show, date: startday, day: startday.getDate(), year: startday.getFullYear(), month: startday.getMonth() + 1 });
option.datestrshow = CalDateShow(days[0].date);
option.vstart = days[0].date;
option.vend = days[0].date;
}
else {
var w = 0;
if (l == 7) {
w = config.weekstartday - startday.getDay();
if (w > 0) w = w - 7;
}
var ndate;
for (var i = w, j = 0; j < l; i = i + 1, j++) {
ndate = DateAdd("d", i, startday);
var show = dateFormat.call(ndate, i18n.xgcalendar.dateformat.Md);
days.push({ display: show, date: ndate, day: ndate.getDate(), year: ndate.getFullYear(), month: ndate.getMonth() + 1 });
}
option.vstart = days[0].date;
option.vend = days[l - 1].date;
option.datestrshow = CalDateShow(days[0].date, days[l - 1].date);
}
var allDayEvents = [];
var scollDayEvents = [];
//get number of all-day events, including more-than-one-day events.
var dM = PropareEvents(days, events, allDayEvents, scollDayEvents);
var html = [];
html.push("");
html.push("
");
BuildWT(html, days, allDayEvents, dM);
html.push("
");
html.push("
");
//onclick=\"javascript:FunProxy('rowhandler',event,this);\"
html.push("");
html.push("");
BuildDayScollEventContainer(html, days, scollDayEvents);
html.push("
");
gridcontainer.html(html.join(""));
html = null;
//TODO event handlers
//$("#weekViewAllDaywk").click(RowHandler);
}
//build month view
function BuildMonthView(showday, events, config) {
var cc = "";
var html = [];
html.push(cc);
//build header
html.push("");
html.push("
");
for (var i = config.weekstartday, j = 0; j < 7; i++, j++) {
if (i > 6) i = 0;
var p = { dayname: __WDAY[i] };
html.push("", __WDAY[i], "");
}
html.push("
");
html.push("
");
var bH = GetMonthViewBodyHeight() - GetMonthViewHeaderHeight();
html.push("");
BuilderMonthBody(html, showday, config.weekstartday, events, bH);
html.push("
");
gridcontainer.html(html.join(""));
html = null;
$("#cal-month-closebtn").click(closeCc);
}
function closeCc() {
$("#cal-month-cc").css("visibility", "hidden");
}
//all-day event, including more-than-one-day events
function PropareEvents(dayarrs, events, aDE, sDE) {
var l = dayarrs.length;
var el = events.length;
var fE = [];
var deB = aDE;
var deA = sDE;
for (var j = 0; j < el; j++) {
var sD = events[j][2];
var eD = events[j][3];
var s = {};
s.event = events[j];
s.day = sD.getDate();
s.year = sD.getFullYear();
s.month = sD.getMonth() + 1;
s.allday = events[j][4] == 1;
s.crossday = events[j][5] == 1;
s.reevent = events[j][6] == 1; //Recurring event
s.daystr = [s.year, s.month, s.day].join("/");
s.st = {};
s.st.hour = sD.getHours();
s.st.minute = sD.getMinutes();
s.st.p = s.st.hour * 60 + s.st.minute; // start time
s.et = {};
s.et.hour = eD.getHours();
s.et.minute = eD.getMinutes();
s.et.p = s.et.hour * 60 + s.et.minute; // end time
fE.push(s);
}
var dMax = 0;
for (var i = 0; i < l; i++) {
var da = dayarrs[i];
deA[i] = []; deB[i] = [];
da.daystr = da.year + "/" + da.month + "/" + da.day;
for (var j = 0; j < fE.length; j++) {
if (!fE[j].crossday && !fE[j].allday) {
if (da.daystr == fE[j].daystr)
deA[i].push(fE[j]);
}
else {
if (da.daystr == fE[j].daystr) {
deB[i].push(fE[j]);
dMax++;
}
else {
if (i == 0 && da.date >= fE[j].event[2] && da.date <= fE[j].event[3])//first more-than-one-day event
{
deB[i].push(fE[j]);
dMax++;
}
}
}
}
}
var lrdate = dayarrs[l - 1].date;
for (var i = 0; i < l; i++) { //to deal with more-than-one-day event
var de = deB[i];
if (de.length > 0) { //
for (var j = 0; j < de.length; j++) {
var end = DateDiff("d", lrdate, de[j].event[3]) > 0 ? lrdate : de[j].event[3];
de[j].colSpan = DateDiff("d", dayarrs[i].date, end) + 1
}
}
de = null;
}
//for all-day events
for (var i = 0; i < l; i++) {
var de = deA[i];
if (de.length > 0) {
var x = [];
var y = [];
var D = [];
var dl = de.length;
var Ia;
for (var j = 0; j < dl; ++j) {
var ge = de[j];
for (var La = ge.st.p, Ia = 0; y[Ia] > La; ) Ia++;
ge.PO = Ia; ge.ne = []; //PO is how many events before this one
y[Ia] = ge.et.p || 1440;
x[Ia] = ge;
if (!D[Ia]) {
D[Ia] = [];
}
D[Ia].push(ge);
if (Ia != 0) {
ge.pe = [x[Ia - 1]]; //previous event
x[Ia - 1].ne.push(ge); //next event
}
for (Ia = Ia + 1; y[Ia] <= La; ) Ia++;
if (x[Ia]) {
var k = x[Ia];
ge.ne.push(k);
k.pe.push(ge);
}
ge.width = 1 / (ge.PO + 1);
ge.left = 1 - ge.width;
}
var k = Array.prototype.concat.apply([], D);
x = y = D = null;
var t = k.length;
for (var y = t; y--; ) {
var H = 1;
var La = 0;
var x = k[y];
for (var D = x.ne.length; D--; ) {
var Ia = x.ne[D];
La = Math.max(La, Ia.VL);
H = Math.min(H, Ia.left)
}
x.VL = La + 1;
x.width = H / (x.PO + 1);
x.left = H - x.width;
}
for (var y = 0; y < t; y++) {
var x = k[y];
x.left = 0;
if (x.pe) for (var D = x.pe.length; D--; ) {
var H = x.pe[D];
x.left = Math.max(x.left, H.left + H.width);
}
var p = (1 - x.left) / x.VL;
x.width = Math.max(x.width, p);
x.aQ = Math.min(1 - x.left, x.width + 0.7 * p); //width offset
}
de = null;
deA[i] = k;
}
}
return dMax;
}
function BuildWT(ht, dayarrs, events, dMax) {
//1:
ht.push("", " ");
for (var i = 0; i < dayarrs.length; i++) {
var ev, title, cl;
if (dayarrs.length == 1) {
ev = "";
title = "";
cl = "";
}
else {
ev = ""; // "onclick=\"javascript:FunProxy('week2day',event,this);\"";
title = i18n.xgcalendar.to_date_view;
cl = "wk-daylink";
}
ht.push("", dayarrs[i].display, "
");
}
ht.push(" ");
ht.push(" "); //end tr1;
//2:
ht.push("");
ht.push(" 1) {
ht.push(" colSpan='", dayarrs.length, "'");
}
//onclick=\"javascript:FunProxy('rowhandler',event,this);\"
ht.push(">");
if (dMax == 0) {
ht.push("");
for (var i = 0; i < dayarrs.length; i++) {
ht.push(" ");
}
ht.push(" ");
}
else {
var l = events.length;
var el = 0;
var x = [];
for (var j = 0; j < l; j++) {
x.push(0);
}
//var c = tc();
for (var j = 0; el < dMax; j++) {
ht.push("");
for (var h = 0; h < l; ) {
var e = events[h][x[h]];
ht.push(" 1) {
ht.push(" colSpan='", e.colSpan, "'");
h += e.colSpan;
}
else {
h++;
}
ht.push(" ch='show'>", t);
t = null;
el++;
}
else {
ht.push(" st-s' ch='qkadd' abbr='", dateFormat.call(dayarrs[h].date, i18n.xgcalendar.dateformat.fulldayvalue), "' axis='00:00'> ");
h++;
}
ht.push(" ");
}
ht.push(" ");
}
ht.push("");
for (var h = 0; h < l; h++) {
ht.push(" ");
}
ht.push(" ");
}
ht.push("
"); // stgrid end //wvAd end //td2 end //tr2 end
//3:
ht.push("");
ht.push(" 1) {
ht.push(" colSpan='", dayarrs.length, "'");
}
ht.push("> ");
ht.push(" ");
}
function BuildDayScollEventContainer(ht, dayarrs, events) {
//1:
ht.push("");
ht.push(" ");
ht.push(" 1) {
ht.push(" colSpan='", dayarrs.length, "'");
}
ht.push(">");
for (var i = 0; i < 24; i++) {
ht.push("
");
}
ht.push("
");
//2:
ht.push("");
ht.push("");
//get current time
var now = new Date(); var h = now.getHours(); var m = now.getMinutes();
var mHg = gP(h, m) - 4; //make middle alignment vertically
ht.push("
");
var tmt = "";
for (var i = 0; i < 24; i++) {
tmt = fomartTimeShow(i);
ht.push("", tmt, "
");
}
ht.push(" ");
var l = dayarrs.length;
for (var i = 0; i < l; i++) {
ht.push("");
var istoday = dateFormat.call(dayarrs[i].date, "yyyyMMdd") == dateFormat.call(new Date(), "yyyyMMdd");
// Today
if (istoday) {
ht.push("
");
}
//var eventC = $(eventWrap);
//onclick=\"javascript:FunProxy('rowhandler',event,this);\"
ht.push("");
BuildEvents(ht, events[i], dayarrs[i]);
ht.push("
");
ht.push("");
if (istoday) {
var mhh = mHg + 4;
ht.push("
");
}
ht.push("
");
ht.push(" ");
}
ht.push(" ");
}
//show events to calendar
function BuildEvents(hv, events, sday) {
for (var i = 0; i < events.length; i++) {
var c;
if (events[i].event[7] && events[i].event[7] >= 0) {
c = tc(events[i].event[7]); //theme
}
else {
c = tc(); //default theme
}
var tt = BuildDayEvent(c, events[i], i);
hv.push(tt);
}
}
function getTitle(event) {
var timeshow, locationshow, attendsshow, eventshow;
var showtime = event[4] != 1;
eventshow = event[1].replace(" ","[Splnené] ");
if (eventshow.indexOf('') !== -1) {
eventsepar=eventshow.split('');
eventshow=eventsepar[1];
}
var startformat = getymformat(event[2], null, showtime, true);
var endformat = getymformat(event[3], event[2], showtime, true);
timeshow = dateFormat.call(event[2], startformat) + " - " + dateFormat.call(event[3], endformat);
locationshow = (event[9] != undefined && event[9] != "") ? event[9] : i18n.xgcalendar.i_undefined;
attendsshow = (event[14] != undefined && event[14] != "") ? event[14] : "";
var ret = [];
if (event[4] == 1) {
ret.push("[" + i18n.xgcalendar.allday_event + "]",$.browser.mozilla?"":"\r\n" );
}
else {
if (event[5] == 1) {
ret.push("[" + i18n.xgcalendar.repeat_event + "]",$.browser.mozilla?"":"\r\n");
}
}
//ret.push(i18n.xgcalendar.time + ":", timeshow, $.browser.mozilla?"":"\r\n", i18n.xgcalendar.event + ":", eventshow,$.browser.mozilla?"":"\r\n", i18n.xgcalendar.location + ":", locationshow);
ret.push(i18n.xgcalendar.time + ": ", timeshow + "
", $.browser.mozilla?"":"\n", i18n.xgcalendar.event + ": ", eventshow + "
",$.browser.mozilla?"":"\n", i18n.xgcalendar.location + ": ", locationshow);
if (attendsshow != "") {
ret.push($.browser.mozilla?"":"\n", "
"+i18n.xgcalendar.participant + ": ", attendsshow);
}
return ret.join("");
}
function BuildDayEvent(theme, e, index) {
var p = { bdcolor: theme[0], bgcolor2: theme[0], bgcolor1: theme[2], width: "70%", icon: "", title: "", data: "" };
p.starttime = pZero(e.st.hour) + ":" + pZero(e.st.minute);
p.endtime = pZero(e.et.hour) + ":" + pZero(e.et.minute);
p.content = e.event[1];
p.title = getTitle(e.event);
p.data = e.event.join("$");
var icons = [];
icons.push(" ");
if (e.reevent) {
icons.push(" ");
}
p.icon = icons.join("");
var sP = gP(e.st.hour, e.st.minute);
var eP = gP(e.et.hour, e.et.minute);
p.top = sP + "px";
p.left = (e.left * 100) + "%";
p.width = (e.aQ * 100) + "%";
p.height = (eP - sP - 4);
p.i = index;
if (option.enableDrag && e.event[8] == 1) {
p.drag = "drag";
p.redisplay = "block";
}
else {
p.drag = "";
p.redisplay = "none";
}
var newtemp = Tp(__SCOLLEVENTTEMP, p);
p = null;
return newtemp;
}
//get body height in month view
function GetMonthViewBodyHeight() {
return option.height;
}
function GetMonthViewHeaderHeight() {
return 21;
}
function BuilderMonthBody(htb, showday, startday, events, bodyHeight) {
var firstdate = new Date(showday.getFullYear(), showday.getMonth(), 1);
var diffday = startday - firstdate.getDay();
var showmonth = showday.getMonth();
if (diffday > 0) {
diffday -= 7;
}
var startdate = DateAdd("d", diffday, firstdate);
var enddate = DateAdd("d", 34, startdate);
var rc = 5;
if (enddate.getFullYear() == showday.getFullYear() && enddate.getMonth() == showday.getMonth() && enddate.getDate() < __MonthDays[showmonth]) {
enddate = DateAdd("d", 7, enddate);
rc = 6;
}
option.vstart = startdate;
option.vend = enddate;
option.datestrshow = CalDateShow(startdate, enddate);
bodyHeight = bodyHeight - 18 * rc;
var rowheight = bodyHeight / rc;
var roweventcount = parseInt(rowheight / 21);
if (rowheight % 21 > 15) {
roweventcount++;
}
var p = 100 / rc;
var formatevents = [];
var hastdata = formartEventsInHashtable(events, startday, 7, startdate, enddate);
var B = [];
var C = [];
for (var j = 0; j < rc; j++) {
var k = 0;
formatevents[j] = b = [];
for (var i = 0; i < 7; i++) {
var newkeyDate = DateAdd("d", j * 7 + i, startdate);
C[j * 7 + i] = newkeyDate;
var newkey = dateFormat.call(newkeyDate, i18n.xgcalendar.dateformat.fulldaykey);
b[i] = hastdata[newkey];
if (b[i] && b[i].length > 0) {
k += b[i].length;
}
}
B[j] = k;
}
//var c = tc();
eventDiv.data("mvdata", formatevents);
for (var j = 0; j < rc; j++) {
//onclick=\"javascript:FunProxy('rowhandler',event,this);\"
htb.push("");
htb.push("
");
var dMax = B[j];
for (var i = 0; i < 7; i++) {
var day = C[j * 7 + i];
htb.push("");
}
else {
htb.push(" class=\"st-bg\">");
}
htb.push(" ");
}
//bgtable
htb.push("
");
//stgrid
htb.push("
");
//title tr
htb.push("");
var titletemp = "${dayshow} ";
for (var i = 0; i < 7; i++) {
var o = { titleClass: "", dayshow: "" };
var day = C[j * 7 + i];
if (dateFormat.call(day, "yyyyMMdd") == dateFormat.call(new Date(), "yyyyMMdd")) {
o.titleClass = " st-dtitle-today";
}
if (day.getMonth() != showmonth) {
o.titleClass = " st-dtitle-nonmonth";
}
o.title = dateFormat.call(day, i18n.xgcalendar.dateformat.fulldayshow);
if (day.getDate() == 1) {
if (day.getMonth == 0) {
o.dayshow = dateFormat.call(day, i18n.xgcalendar.dateformat.fulldayshow);
}
else {
o.dayshow = dateFormat.call(day, i18n.xgcalendar.dateformat.Md3);
}
}
else {
o.dayshow = day.getDate();
}
o.abbr = dateFormat.call(day, i18n.xgcalendar.dateformat.fulldayvalue);
htb.push(Tp(titletemp, o));
}
htb.push(" ");
var sfirstday = C[j * 7];
BuildMonthRow(htb, formatevents[j], dMax, roweventcount, sfirstday);
//htb=htb.concat(rowHtml); rowHtml = null;
htb.push("
");
//month-row
htb.push("
");
}
formatevents = B = C = hastdata = null;
//return htb;
}
//formate datetime
function formartEventsInHashtable(events, startday, daylength, rbdate, redate) {
var hast = new Object();
var l = events.length;
for (var i = 0; i < l; i++) {
var sD = events[i][2];
var eD = events[i][3];
var diff = DateDiff("d", sD, eD);
var s = {};
s.event = events[i];
s.day = sD.getDate();
s.year = sD.getFullYear();
s.month = sD.getMonth() + 1;
s.allday = events[i][4] == 1;
s.crossday = events[i][5] == 1;
s.reevent = events[i][6] == 1; //Recurring event
s.daystr = s.year + "/" + s.month + "/" + s.day;
s.st = {};
s.st.hour = sD.getHours();
s.st.minute = sD.getMinutes();
s.st.p = s.st.hour * 60 + s.st.minute; // start time position
s.et = {};
s.et.hour = eD.getHours();
s.et.minute = eD.getMinutes();
s.et.p = s.et.hour * 60 + s.et.minute; // end time postition
if (diff > 0) {
if (sD < rbdate) { //start date out of range
sD = rbdate;
}
if (eD > redate) { //end date out of range
eD = redate;
}
var f = startday - sD.getDay();
if (f > 0) { f -= daylength; }
var sdtemp = DateAdd("d", f, sD);
for (; sdtemp <= eD; sD = sdtemp = DateAdd("d", daylength, sdtemp)) {
var d = Clone(s);
var key = dateFormat.call(sD, i18n.xgcalendar.dateformat.fulldaykey);
var x = DateDiff("d", sdtemp, eD);
if (hast[key] == null) {
hast[key] = [];
}
d.colSpan = (x >= daylength) ? daylength - DateDiff("d", sdtemp, sD) : DateDiff("d", sD, eD) + 1;
hast[key].push(d);
d = null;
}
}
else {
var key = dateFormat.call(events[i][2], i18n.xgcalendar.dateformat.fulldaykey);
if (hast[key] == null) {
hast[key] = [];
}
s.colSpan = 1;
hast[key].push(s);
}
s = null;
}
return hast;
}
function BuildMonthRow(htr, events, dMax, sc, day) {
var x = [];
var y = [];
var z = [];
var cday = [];
var l = events.length;
var el = 0;
//var c = tc();
for (var j = 0; j < l; j++) {
x.push(0);
y.push(0);
z.push(0);
cday.push(DateAdd("d", j, day));
}
for (var j = 0; j < l; j++) {
var ec = events[j] ? events[j].length : 0;
y[j] += ec;
for (var k = 0; k < ec; k++) {
var e = events[j][k];
if (e && e.colSpan > 1) {
for (var m = 1; m < e.colSpan; m++) {
y[j + m]++;
}
}
}
}
//var htr=[];
var tdtemp = "${html} ";
for (var j = 0; j < sc && el < dMax; j++) {
htr.push("");
//var gridtr = $(__TRTEMP);
for (var h = 0; h < l; ) {
var e = events[h] ? events[h][x[h]] : undefined;
var tempdata = { "class": "", axis: "", ch: "", title: "", abbr: "", html: "", otherAttr: "", click: "javascript:void(0);" };
var tempCss = ["st-c"];
if (e) {
x[h] = x[h] + 1;
//last event of the day
var bs = false;
if (z[h] + 1 == y[h] && e.colSpan == 1) {
bs = true;
}
if (!bs && j == (sc - 1) && z[h] < y[h]) {
el++;
$.extend(tempdata, { "axis": h, ch: "more", "abbr": dateFormat.call(cday[h], i18n.xgcalendar.dateformat.fulldayvalue), html: i18n.xgcalendar.others + (y[h] - z[h]) + i18n.xgcalendar.item, click: "javascript:alert('more event');" });
tempCss.push("st-more st-moreul");
h++;
}
else {
tempdata.html = BuildMonthDayEvent(e, cday[h], l - h);
tempdata.ch = "show";
if (e.colSpan > 1) {
tempdata.otherAttr = " colSpan='" + e.colSpan + "'";
for (var m = 0; m < e.colSpan; m++) {
z[h + m] = z[h + m] + 1;
}
h += e.colSpan;
}
else {
z[h] = z[h] + 1;
h++;
}
el++;
}
}
else {
if (j == (sc - 1) && z[h] < y[h] && y[h] > 0) {
$.extend(tempdata, { "axis": h, ch: "more", "abbr": dateFormat.call(cday[h], i18n.xgcalendar.dateformat.fulldayvalue), html: i18n.xgcalendar.others + (y[h] - z[h]) + i18n.xgcalendar.item, click: "javascript:alert('more event');" });
tempCss.push("st-more st-moreul");
h++;
}
else {
$.extend(tempdata, { html: " ", ch: "qkadd", "axis": "00:00", "abbr": dateFormat.call(cday[h], i18n.xgcalendar.dateformat.fulldayvalue), title: "" });
tempCss.push("st-s");
h++;
}
}
tempdata.cssclass = tempCss.join(" ");
tempCss = null;
htr.push(Tp(tdtemp, tempdata));
tempdata = null;
}
htr.push(" ");
}
x = y = z = cday = null;
//return htr;
}
function BuildMonthDayEvent(e, cday, length) {
var theme;
if (e.event[7] && e.event[7] >= 0) {
theme = tc(e.event[7]);
}
else {
theme = tc();
}
var p = { color: theme[2], title: "", extendClass: "", extendHTML: "", data: "" };
p.title = getTitle(e.event);
p.id = "bbit_cal_event_" + e.event[0];
if (option.enableDrag && e.event[8] == 1) {
p.eclass = "drag";
}
else {
p.eclass = "cal_" + e.event[0];
}
p.data = e.event.join("$");
var sp = "${content} ";
var i = " ";
var i2 = " ";
var ml = "
";
var mr = "
";
var arrm = [];
var sf = e.event[2] < cday;
var ef = DateDiff("d", cday, e.event[3]) >= length; //e.event[3] >= DateAdd("d", 1, cday);
if (sf || ef) {
if (sf) {
arrm.push(ml);
p.extendClass = "st-ad-mpad ";
}
if (ef)
{ arrm.push(mr); }
p.extendHTML = arrm.join("");
}
var cen;
if (!e.allday && !sf) {
cen = pZero(e.st.hour) + ":" + pZero(e.st.minute) + " " + e.event[1];
}
else {
cen = e.event[1];
}
var content = [];
content.push(Tp(sp, { content: cen }));
content.push(i);
if (e.reevent)
{ content.push(i2); }
p.content = content.join("");
return Tp(__ALLDAYEVENTTEMP, p);
}
//to populate the data
function populate() {
if (option.isloading) {
return true;
}
if (option.url && option.url != "") {
option.isloading = true;
//clearcontainer();
if (option.onBeforeRequestData && $.isFunction(option.onBeforeRequestData)) {
option.onBeforeRequestData(1);
}
var zone = new Date().getTimezoneOffset() / 60 * -1;
var param = [
{ name: "showdate", value: dateFormat.call(option.showday, i18n.xgcalendar.dateformat.fulldayvalue) },
{ name: "viewtype", value: option.view },
{ name: "timezone", value: zone }
];
if (option.extParam) {
for (var pi = 0; pi < option.extParam.length; pi++) {
param[param.length] = option.extParam[pi];
}
}
$.ajax({
type: option.method, //
url: option.url,
data: param,
//dataType: "text", // fixed jquery 1.4 not support Ms Date Json Format /Date(@Tickets)/
dataType: "json",
dataFilter: function(data, type) {
//return data.replace(/"\\\/(Date\([0-9-]+\))\\\/"/gi, "new $1");
return data;
},
success: function(data) {//function(datastr) {
//datastr =datastr.replace(/"\\\/(Date\([0-9-]+\))\\\/"/gi, 'new $1');
//var data = (new Function("return " + datastr))();
option.eventItems = new Array();
if (data != null && data.error != null) {
if (option.onRequestDataError) {
option.onRequestDataError(1, data);
}
}
else {
data["start"] = parseDate(data["start"]);
data["end"] = parseDate(data["end"]);
$.each(data.events, function(index, value) {
value[2] = parseDate(value[2]);
value[3] = parseDate(value[3]);
});
responseData(data, data.start, data.end);
pushER(data.start, data.end);
}
if (option.onAfterRequestData && $.isFunction(option.onAfterRequestData)) {
option.onAfterRequestData(1);
}
option.isloading = false;
},
error: function(data) {
try {
if (option.onRequestDataError) {
option.onRequestDataError(1, data);
} else {
alert(i18n.xgcalendar.get_data_exception);
}
if (option.onAfterRequestData && $.isFunction(option.onAfterRequestData)) {
option.onAfterRequestData(1);
}
option.isloading = false;
} catch (e) { }
}
});
}
else {
alert("url" + i18n.xgcalendar.i_undefined);
}
}
function responseData(data, start, end) {
var events;
if (data.issort == false) {
if (data.events && data.events.length > 0) {
events = data.sort(function(l, r) { return l[2] > r[2] ? -1 : 1; });
}
else {
events = [];
}
}
else {
events = data.events;
}
ConcatEvents(events, start, end);
render();
}
function clearrepeat(events, start, end) {
var jl = events.length;
if (jl > 0) {
var es = events[0][2];
var el = events[jl - 1][2];
for (var i = 0, l = option.eventItems.length; i < l; i++) {
if (option.eventItems[i][2] > el || jl == 0) {
break;
}
if (option.eventItems[i][2] >= es) {
for (var j = 0; j < jl; j++) {
if (option.eventItems[i][0] == events[j][0] && option.eventItems[i][2] < start) {
events.splice(j, 1); //for duplicated event
jl--;
break;
}
}
}
}
}
}
function ConcatEvents(events, start, end) {
if (!events) {
events = [];
}
if (events) {
if (option.eventItems.length == 0) {
option.eventItems = events;
}
else {
//remove duplicated one
clearrepeat(events, start, end);
var l = events.length;
var sl = option.eventItems.length;
var sI = -1;
var eI = sl;
var s = start;
var e = end;
if (option.eventItems[0][2] > e)
{
option.eventItems = events.concat(option.eventItems);
return;
}
if (option.eventItems[sl - 1][2] < s)
{
option.eventItems = option.eventItems.concat(events);
return;
}
for (var i = 0; i < sl; i++) {
if (option.eventItems[i][2] >= s && sI < 0) {
sI = i;
continue;
}
if (option.eventItems[i][2] > e) {
eI = i;
break;
}
}
var e1 = sI <= 0 ? [] : option.eventItems.slice(0, sI);
var e2 = eI == sl ? [] : option.eventItems.slice(eI);
option.eventItems = [].concat(e1, events, e2);
events = e1 = e2 = null;
}
}
}
//utils goes here
function weekormonthtoday(e) {
var th = $(this);
var daystr = th.attr("abbr");
option.showday = strtodate(daystr + " 00:00");
option.view = "day";
render();
if (option.onweekormonthtoday) {
option.onweekormonthtoday(option);
}
return false;
}
function parseDate(str){
return new Date(Date.parse(str));
}
function gP(h, m) {
return h * 42 + parseInt(m / 60 * 42);
}
function gW(ts1, ts2) {
var t1 = ts1 / 42;
var t2 = parseInt(t1);
var t3 = t1 - t2 >= 0.5 ? 30 : 0;
var t4 = ts2 / 42;
var t5 = parseInt(t4);
var t6 = t4 - t5 >= 0.5 ? 30 : 0;
return { sh: t2, sm: t3, eh: t5, em: t6, h: ts2 - ts1 };
}
function gH(y1, y2, pt) {
var sy1 = Math.min(y1, y2);
var sy2 = Math.max(y1, y2);
var t1 = (sy1 - pt) / 42;
var t2 = parseInt(t1);
var t3 = t1 - t2 >= 0.5 ? 30 : 0;
var t4 = (sy2 - pt) / 42;
var t5 = parseInt(t4);
var t6 = t4 - t5 >= 0.5 ? 30 : 0;
return { sh: t2, sm: t3, eh: t5, em: t6, h: sy2 - sy1 };
}
function pZero(n) {
return n < 10 ? "0" + n : "" + n;
}
//to get color list array
function tc(d) {
function zc(c, i) {
/*
0. 666666888888aaaaaabbbbbbdddddd
1. a32929cc3333d96666e69999f0c2c2
2. b1365fdd4477e67399eea2bbf5c7d6
3. 7a367a994499b373b3cca2cce1c7e1
4. 5229a36633cc8c66d9b399e6d1c2f0
5. 29527a336699668cb399b3ccc2d1e1
6. 2952a33366cc668cd999b3e6c2d1f0
7. 1b887a22aa9959bfb391d5ccbde6e1
8. 28754e32926265ad8999c9b1c2dfd0
9. 0d78131096184cb05288cb8cb8e0ba
10. 52880066aa008cbf40b3d580d1e6b3
11. 88880eaaaa11bfbf4dd5d588e6e6b8
12. ab8b00d6ae00e0c240ebd780f3e7b3
13. be6d00ee8800f2a640f7c480fadcb3
14. b1440edd5511e6804deeaa88f5ccb8
15. 865a5aa87070be9494d4b8b8e5d4d4
16. 7057708c6d8ca992a9c6b6c6ddd3dd
17. 4e5d6c6274878997a5b1bac3d0d6db
18. 5a69867083a894a2beb8c1d4d4dae5
19. 4a716c5c8d8785aaa5aec6c3cedddb
20. 6e6e41898951a7a77dc4c4a8dcdccb
21. 8d6f47b08b59c4a883d8c5ace7dcce
22. 000000000000dd0000000000000000 - cervena // rezervacie vozidiel
23. 0000000000008b4513000000000000 - hneda // dovolenka
24. 0000000000000080ff000000000000 - svetlomodra // deti
25. 0000000000000000dd000000000000 - modra // rezervacie kancelarii
26. 000000000000c0621b000000000000 - svetlohnedé // sviatok
*/
var d = "666666888888aaaaaabbbbbbdddddda32929cc3333d96666e69999f0c2c2b1365fdd4477e67399eea2bbf5c7d67a367a994499b373b3cca2cce1c7e15229a36633cc8c66d9b399e6d1c2f029527a336699668cb399b3ccc2d1e12952a33366cc668cd999b3e6c2d1f01b887a22aa9959bfb391d5ccbde6e128754e32926265ad8999c9b1c2dfd00d78131096184cb05288cb8cb8e0ba52880066aa008cbf40b3d580d1e6b388880eaaaa11bfbf4dd5d588e6e6b8ab8b00d6ae00e0c240ebd780f3e7b3be6d00ee8800f2a640f7c480fadcb3b1440edd5511e6804deeaa88f5ccb8865a5aa87070be9494d4b8b8e5d4d47057708c6d8ca992a9c6b6c6ddd3dd4e5d6c6274878997a5b1bac3d0d6db5a69867083a894a2beb8c1d4d4dae54a716c5c8d8785aaa5aec6c3cedddb6e6e41898951a7a77dc4c4a8dcdccb8d6f47b08b59c4a883d8c5ace7dcce000000000000dd00000000000000000000000000008b45130000000000000000000000000080ff0000000000000000000000000000dd000000000000000000000000c0621b000000000000";
return "#" + d.substring(c * 30 + i * 6, c * 30 + (i + 1) * 6);
}
var c = d != null && d != undefined ? d : option.theme;
return [zc(c, 0), zc(c, 1), zc(c, 2), zc(c, 3)];
}
function Tp(temp, dataarry) {
return temp.replace(/\$\{([\w]+)\}/g, function(s1, s2) { var s = dataarry[s2]; if (typeof (s) != "undefined") { return s; } else { return s1; } });
}
function Ta(temp, dataarry) {
return temp.replace(/\{([\d])\}/g, function(s1, s2) { var s = dataarry[s2]; if (typeof (s) != "undefined") { return encodeURIComponent(s); } else { return ""; } });
}
function fomartTimeShow(h) {
return h < 10 ? "0" + h + ":00" : h + ":00";
}
function getymformat(date, comparedate, isshowtime, isshowweek, showcompare) {
var showyear = isshowtime != undefined ? (date.getFullYear() != new Date().getFullYear()) : true;
var showmonth = true;
var showday = true;
var showtime = isshowtime || false;
var showweek = isshowweek || false;
if (comparedate) {
showyear = comparedate.getFullYear() != date.getFullYear();
//showmonth = comparedate.getFullYear() != date.getFullYear() || date.getMonth() != comparedate.getMonth();
if (comparedate.getFullYear() == date.getFullYear() &&
date.getMonth() == comparedate.getMonth() &&
date.getDate() == comparedate.getDate()
) {
showyear = showmonth = showday = showweek = false;
}
}
var a = [];
if (showyear) {
a.push(i18n.xgcalendar.dateformat.fulldayshow)
} else if (showmonth) {
a.push(i18n.xgcalendar.dateformat.Md3)
} else if (showday) {
a.push(i18n.xgcalendar.dateformat.day);
}
a.push(showweek ? " (W)" : "", showtime ? " HH:mm" : "");
return a.join("");
}
function CalDateShow(startday, endday, isshowtime, isshowweek) {
if (!endday) {
return dateFormat.call(startday, getymformat(startday,null,isshowtime));
} else {
var strstart= dateFormat.call(startday, getymformat(startday, null, isshowtime, isshowweek));
var strend=dateFormat.call(endday, getymformat(endday, startday, isshowtime, isshowweek));
var join = (strend!=""? " - ":"");
return [strstart,strend].join(join);
}
}
function dochange() {
var d = getRdate();
var loaded = checkInEr(d.start, d.end);
if (!loaded) {
populate();
}
}
function checkInEr(start, end) {
var ll = option.loadDateR.length;
if (ll == 0) {
return false;
}
var r = false;
var r2 = false;
for (var i = 0; i < ll; i++) {
r = false, r2 = false;
var dr = option.loadDateR[i];
if (start >= dr.startdate && start <= dr.enddate) {
r = true;
}
if (dateFormat.call(start, "yyyyMMdd") == dateFormat.call(dr.startdate, "yyyyMMdd") || dateFormat.call(start, "yyyyMMdd") == dateFormat.call(dr.enddate, "yyyyMMdd")) {
r = true;
}
if (!end)
{ r2 = true; }
else {
if (end >= dr.startdate && end <= dr.enddate) {
r2 = true;
}
if (dateFormat.call(end, "yyyyMMdd") == dateFormat.call(dr.startdate, "yyyyMMdd") || dateFormat.call(end, "yyyyMMdd") == dateFormat.call(dr.enddate, "yyyyMMdd")) {
r2 = true;
}
}
if (r && r2) {
break;
}
}
return r && r2;
}
function buildtempdayevent(sh, sm, eh, em, h, title, w, resize, thindex) {
var theme = thindex != undefined && thindex >= 0 ? tc(thindex) : tc();
var newtemp = Tp(__SCOLLEVENTTEMP, {
bdcolor: theme[0],
bgcolor2: theme[0],
bgcolor1: theme[2],
data: "",
starttime: [pZero(sh), pZero(sm)].join(":"),
endtime: [pZero(eh), pZero(em)].join(":"),
content: title ? title : i18n.xgcalendar.new_event,
title: title ? title : i18n.xgcalendar.new_event,
icon: " ",
top: "0px",
left: "",
width: w ? w : "100%",
height: h - 4,
i: "-1",
drag: "drag-chip",
redisplay: resize ? "block" : "none"
});
return newtemp;
}
function getdata(chip) {
var hddata = chip.find("div.dhdV");
if (hddata.length == 1) {
var str = hddata.text();
return parseED(str.split("$"));
}
return null;
}
function parseED(data) {
if (data.length > 6) {
var e = [];
e.push(data[0], data[1], new Date(data[2]), new Date(data[3]), parseInt(data[4]), parseInt(data[5]), parseInt(data[6]), data[7] != undefined ? parseInt(data[7]) : -1, data[8] != undefined ? parseInt(data[8]) : 0, data[9], data[10]);
return e;
}
return null;
}
function quickd(type) {
$("#bbit-cs-buddle").css("visibility", "hidden");
var calid = $("#bbit-cs-id").val();
var param = [{ "name": "calendarId", value: calid },
{ "name": "type", value: type}];
var de = rebyKey(calid, true);
option.onBeforeRequestData && option.onBeforeRequestData(3);
$.post(option.quickDeleteUrl, param, function(data) {
if (data) {
if (data.IsSuccess) {
de = null;
option.onAfterRequestData && option.onAfterRequestData(3);
}
else {
option.onRequestDataError && option.onRequestDataError(3, data);
Ind(de);
render();
option.onAfterRequestData && option.onAfterRequestData(3);
}
}
}, "json");
render();
}
function getbuddlepos(x, y) {
var tleft = x - 110;
var ttop = y - 217;
var maxLeft = document.documentElement.clientWidth;
var maxTop = document.documentElement.clientHeight;
var ishide = false;
if (tleft <= 0 || ttop <= 0 || tleft + 400 > maxLeft) {
tleft = x - 200 <= 0 ? 10 : x - 200;
ttop = y - 159 <= 0 ? 10 : y - 159;
if (tleft + 400 >= maxLeft) {
tleft = maxLeft - 410;
}
if (ttop + 164 >= maxTop) {
ttop = maxTop - 165;
}
ishide = true;
}
return { left: tleft, top: ttop, hide: ishide };
}
function dayshow(e, data) {
if (data == undefined) {
data = getdata($(this));
}
if (data != null) {
if (option.quickDeleteUrl != "" && data[8] == 1 && option.readonly != true) {
/*
var csbuddle = '
[ '
+ i18n.xgcalendar.i_delete + ' ] '
+ i18n.xgcalendar.update_detail + ' >>
';
*/
var csbuddle = '
'
if (jqcalendar_dovolenka.hasOwnProperty(data[0])) { } else { var csbuddle = csbuddle + ' ' + i18n.xgcalendar.update_detail + ' >> '; }
var csbuddle = csbuddle +'
';
var bud = $("#bbit-cs-buddle");
if (bud.length == 0) {
bud = $(csbuddle).appendTo(document.body);
var calbutton = $("#bbit-cs-delete");
var lbtn = $("#bbit-cs-editLink");
var closebtn = $("#bubbleClose2").click(function() {
$("#bbit-cs-buddle").css("visibility", "hidden");
});
calbutton.click(function() {
var data = $("#bbit-cs-buddle").data("cdata");
if (option.DeleteCmdhandler && $.isFunction(option.DeleteCmdhandler)) {
option.DeleteCmdhandler.call(this, data, quickd);
}
else {
if (confirm(i18n.xgcalendar.confirm_delete_event + "?")) {
var s = 0; //0 single event , 1 for Recurring event
if (data[6] == 1) {
if (confirm(i18n.xgcalendar.confrim_delete_event_or_all)) {
s = 0;
}
else {
s = 1;
}
}
else {
s = 0;
}
quickd(s);
}
}
});
$("#bbit-cs-editLink2").click(function() {
window.location = $(this).attr('href');
});
$("#bbit-cs-what").click(function(e) {
/*
if (!option.ViewCmdhandler) {
alert("ViewCmdhandler" + i18n.xgcalendar.i_undefined);
}
else {
if (option.ViewCmdhandler && $.isFunction(option.ViewCmdhandler)) {
option.ViewCmdhandler.call(this, $("#bbit-cs-buddle").data("cdata"));
}
}
$("#bbit-cs-buddle").css("visibility", "hidden");
return false;
*/
});
lbtn.click(function(e) {
if (!option.EditCmdhandler) {
alert("EditCmdhandler" + i18n.xgcalendar.i_undefined);
}
else {
if (option.EditCmdhandler && $.isFunction(option.EditCmdhandler)) {
option.EditCmdhandler.call(this, $("#bbit-cs-buddle").data("cdata"));
}
}
$("#bbit-cs-buddle").css("visibility", "hidden");
return false;
});
bud.click(function() { return false });
}
var pos = getbuddlepos(e.pageX, e.pageY);
if (pos.hide) {
$("#prong1").hide()
}
else {
$("#prong1").show()
}
var ss = [];
var iscos = DateDiff("d", data[2], data[3]) != 0;
ss.push(dateFormat.call(data[2], i18n.xgcalendar.dateformat.Md3), " (", __WDAY[data[2].getDay()], ")");
if (data[4] != 1) {
ss.push(",", dateFormat.call(data[2], "HH:mm"));
}
if (iscos) {
ss.push(" - ", dateFormat.call(data[3], i18n.xgcalendar.dateformat.Md3), " (", __WDAY[data[3].getDay()], ")");
if (data[4] != 1) {
ss.push(",", dateFormat.call(data[3], "HH:mm"));
}
}
var ts = $("#bbit-cs-buddle-timeshow").html(ss.join(""));
$("#bbit-cs-what").html(data[1]);
$("#bbit-cs-id").val(data[0]);
bud.data("cdata", data);
bud.css({ "visibility": "visible", left: pos.left, top: pos.top });
$(document).one("click", function() {
$("#bbit-cs-buddle").css("visibility", "hidden");
});
}
else {
$(".klikol").click(function() {
window.open($(this).attr('href'), 'testName');
//window.location = $(this).attr('href');
});
/*
if (!option.ViewCmdhandler) {
//alert("ViewCmdhandler" + i18n.xgcalendar.i_undefined);
}
else {
if (option.ViewCmdhandler && $.isFunction(option.ViewCmdhandler)) {
option.ViewCmdhandler.call(this, data);
}
}
*/
}
}
else {
alert(i18n.xgcalendar.data_format_error);
}
return false;
}
function moreshow(mv) {
var me = $(this);
var divIndex = mv.id.split('_')[1];
var pdiv = $(mv);
var offsetMe = me.position();
var offsetP = pdiv.position();
var width = (me.width() + 2) * 1.5;
var top = offsetP.top + 15;
var left = offsetMe.left;
var daystr = this.abbr;
var arrdays = daystr.split('/');
var day = new Date(arrdays[2], parseInt(arrdays[0] - 1), arrdays[1]);
var cc = $("#cal-month-cc");
var ccontent = $("#cal-month-cc-content table tbody");
var ctitle = $("#cal-month-cc-title");
ctitle.html(dateFormat.call(day, i18n.xgcalendar.dateformat.Md3) + " " + __WDAY[day.getDay()]);
ccontent.empty();
//var c = tc()[2];
var edata = $("#gridEvent").data("mvdata");
var events = edata[divIndex];
var index = parseInt(this.axis);
var htm = [];
for (var i = 0; i <= index; i++) {
var ec = events[i] ? events[i].length : 0;
for (var j = 0; j < ec; j++) {
var e = events[i][j];
if (e) {
if ((e.colSpan + i - 1) >= index) {
htm.push("");
htm.push(BuildMonthDayEvent(e, day, 1));
htm.push(" ");
}
}
}
}
ccontent.html(htm.join(""));
//click
ccontent.find("div.rb-o").each(function(i) {
$(this).click(dayshow);
});
edata = events = null;
var height = cc.height();
var maxleft = document.documentElement.clientWidth;
var maxtop = document.documentElement.clientHeight;
if (left + width >= maxleft) {
left = offsetMe.left - (me.width() + 2) * 0.5;
}
if (top + height >= maxtop) {
top = maxtop - height - 2;
}
var newOff = { left: left, top: top, "z-index": 180, width: width, "visibility": "visible" };
cc.css(newOff);
$(document).one("click", closeCc);
return false;
}
function dayupdate(data, start, end) {
if (option.quickUpdateUrl != "" && data[8] == 1 && option.readonly != true) {
if (option.isloading) {
return false;
}
option.isloading = true;
var id = data[0];
var os = data[2];
var od = data[3];
var zone = new Date().getTimezoneOffset() / 60 * -1;
var param = [{ "name": "calendarId", value: id },
{ "name": "CalendarStartTime", value: dateFormat.call(start, i18n.xgcalendar.dateformat.fulldayvalue + " HH:mm") },
{ "name": "CalendarEndTime", value: dateFormat.call(end, i18n.xgcalendar.dateformat.fulldayvalue + " HH:mm") },
{ "name": "timezone", value: zone }
];
var d;
if (option.quickUpdateHandler && $.isFunction(option.quickUpdateHandler)) {
option.quickUpdateHandler.call(this, param);
}
else {
option.onBeforeRequestData && option.onBeforeRequestData(4);
$.post(option.quickUpdateUrl, param, function(data) {
if (data) {
if (data.IsSuccess == true) {
option.isloading = false;
option.onAfterRequestData && option.onAfterRequestData(4);
}
else {
option.onRequestDataError && option.onRequestDataError(4, data);
option.isloading = false;
d = rebyKey(id, true);
d[2] = os;
d[3] = od;
Ind(d);
render();
d = null;
option.onAfterRequestData && option.onAfterRequestData(4);
}
}
}, "json");
d = rebyKey(id, true);
if (d) {
d[2] = start;
d[3] = end;
}
Ind(d);
render();
}
}
}
function quickadd(start, end, isallday, pos) {
if ((!option.quickAddHandler && option.quickAddUrl == "") || option.readonly) {
return;
}
var buddle = $("#bbit-cal-buddle");
if (buddle.length == 0) {
var temparr = [];
temparr.push('');
var tempquickAddHanler = temparr.join("");
temparr = null;
$(document.body).append(tempquickAddHanler);
buddle = $("#bbit-cal-buddle");
var calbutton = $("#bbit-cal-quickAddBTN");
var lbtn = $("#bbit-cal-editLink");
var closebtn = $("#bubbleClose1").click(function() {
$("#bbit-cal-buddle").css("visibility", "hidden");
realsedragevent();
});
$("#bbit-cal-what").click(function() {
$("#bbit-cal-what").focus();
});
calbutton.click(function(e) {
if (option.isloading) {
return false;
}
option.isloading = true;
var what = $("#bbit-cal-what").val();
var typeofact = $( "input:radio[name=typeofact]:checked" ).val();
var color = $( "input:radio[name=color]:checked" ).val();
var datestart = $("#bbit-cal-start").val();
var dateend = $("#bbit-cal-end").val();
var allday = $("#bbit-cal-allday").val();
var f = /^[^\$\<\>]+$/.test(what);
if (!f) {
alert(i18n.xgcalendar.invalid_title);
$("#bbit-cal-what").focus();
option.isloading = false;
return false;
}
var zone = new Date().getTimezoneOffset() / 60 * -1;
var param = [{ "name": "CalendarTitle", value: what },
{ "name": "CalendarStartTime", value: datestart },
{ "name": "CalendarEndTime", value: dateend },
{ "name": "IsAllDayEvent", value: allday },
{ "name": "TypeOfActivity", value: typeofact },
{ "name": "Color", value: color },
{ "name": "timezone", value: zone}];
if (option.extParam) {
for (var pi = 0; pi < option.extParam.length; pi++) {
param[param.length] = option.extParam[pi];
}
}
if (option.quickAddHandler && $.isFunction(option.quickAddHandler)) {
option.quickAddHandler.call(this, param);
$("#bbit-cal-buddle").css("visibility", "hidden");
realsedragevent();
}
else {
$("#bbit-cal-buddle").css("visibility", "hidden");
var newdata = [];
var tId = -1;
option.onBeforeRequestData && option.onBeforeRequestData(2);
$.post(option.quickAddUrl, param, function(data) {
if (data) {
if (data.IsSuccess == true) {
option.isloading = false;
option.eventItems[tId][0] = data.Data;
option.eventItems[tId][8] = 1;
render();
option.onAfterRequestData && option.onAfterRequestData(2);
}
else {
option.onRequestDataError && option.onRequestDataError(2, data);
option.isloading = false;
option.onAfterRequestData && option.onAfterRequestData(2);
}
}
}, "json");
newdata.push(-1, what);
var sd = strtodate(datestart);
var ed = strtodate(dateend);
var diff = DateDiff("d", sd, ed);
newdata.push(sd, ed, allday == "1" ? 1 : 0, diff > 0 ? 1 : 0, 0);
newdata.push(-1, 0, "", "");
tId = Ind(newdata);
realsedragevent();
render();
}
});
lbtn.click(function(e) {
if (!option.EditCmdhandler) {
alert("EditCmdhandler" + i18n.xgcalendar.i_undefined);
}
else {
if (option.EditCmdhandler && $.isFunction(option.EditCmdhandler)) {
option.EditCmdhandler.call(this, ['0', $("#bbit-cal-what").val(), $("#bbit-cal-start").val(), $("#bbit-cal-end").val(), $("#bbit-cal-allday").val()]);
}
$("#bbit-cal-buddle").css("visibility", "hidden");
realsedragevent();
}
return false;
});
buddle.mousedown(function(e) { return false });
}
var dateshow = CalDateShow(start, end, !isallday, true);
var off = getbuddlepos(pos.left, pos.top);
if (off.hide) {
$("#prong2").hide()
}
else {
$("#prong2").show()
}
$("#bbit-cal-buddle-timeshow").html(dateshow);
var calwhat = $("#bbit-cal-what").val("");
$("#bbit-cal-allday").val(isallday ? "1" : "0");
$("#bbit-cal-start").val(dateFormat.call(start, i18n.xgcalendar.dateformat.fulldayvalue + " HH:mm"));
$("#bbit-cal-end").val(dateFormat.call(end, i18n.xgcalendar.dateformat.fulldayvalue + " HH:mm"));
buddle.css({ "visibility": "visible", left: off.left, top: off.top });
calwhat.blur().focus(); //add 2010-01-26 blur() fixed chrome
$(document).one("mousedown", function() {
$("#bbit-cal-buddle").css("visibility", "hidden");
realsedragevent();
});
return false;
}
//format datestring to Date Type
function strtodate(str) {
var arr = str.split(" ");
var arr2 = arr[0].split(i18n.xgcalendar.dateformat.separator);
var arr3 = arr[1].split(":");
var y = arr2[i18n.xgcalendar.dateformat.year_index];
var m = arr2[i18n.xgcalendar.dateformat.month_index].indexOf("0") == 0 ? arr2[i18n.xgcalendar.dateformat.month_index].substr(1, 1) : arr2[i18n.xgcalendar.dateformat.month_index];
var d = arr2[i18n.xgcalendar.dateformat.day_index].indexOf("0") == 0 ? arr2[i18n.xgcalendar.dateformat.day_index].substr(1, 1) : arr2[i18n.xgcalendar.dateformat.day_index];
var h = arr3[0].indexOf("0") == 0 ? arr3[0].substr(1, 1) : arr3[0];
var n = arr3[1].indexOf("0") == 0 ? arr3[1].substr(1, 1) : arr3[1];
return new Date(y, parseInt(m) - 1, d, h, n);
}
function rebyKey(key, remove) {
if (option.eventItems && option.eventItems.length > 0) {
var sl = option.eventItems.length;
var i = -1;
for (var j = 0; j < sl; j++) {
if (option.eventItems[j][0] == key) {
i = j;
break;
}
}
if (i >= 0) {
var t = option.eventItems[i];
if (remove) {
option.eventItems.splice(i, 1);
}
return t;
}
}
return null;
}
function Ind(event, i) {
var d = 0;
if (!i) {
if (option.eventItems && option.eventItems.length > 0) {
var sl = option.eventItems.length;
var s = event[2];
var d1 = s.getTime() - option.eventItems[0][2].getTime();
var d2 = option.eventItems[sl - 1][2].getTime() - s.getTime();
var diff = d1 - d2;
if (d1 < 0 || diff < 0) {
for (var j = 0; j < sl; j++) {
if (option.eventItems[j][2] >= s) {
i = j;
break;
}
}
}
else if (d2 < 0) {
i = sl;
}
else {
for (var j = sl - 1; j >= 0; j--) {
if (option.eventItems[j][2] < s) {
i = j + 1;
break;
}
}
}
}
else {
i = 0;
}
}
else {
d = 1;
}
if (option.eventItems && option.eventItems.length > 0) {
if (i == option.eventItems.length) {
option.eventItems.push(event);
}
else { option.eventItems.splice(i, d, event); }
}
else {
option.eventItems = [event];
}
return i;
}
function ResizeView() {
var _MH = document.documentElement.clientHeight;
var _viewType = option.view;
if (_viewType == "day" || _viewType == "week") {
var $dvwkcontaienr = $("#dvwkcontaienr");
var $dvtec = $("#dvtec");
if ($dvwkcontaienr.length == 0 || $dvtec.length == 0) {
alert(i18n.xgcalendar.view_no_ready); return;
}
var dvwkH = $dvwkcontaienr.height() + 2;
var calH = option.height - 8 - dvwkH;
$dvtec.height(calH);
if (typeof (option.scoll) == "undefined") {
var currentday = new Date();
var h = currentday.getHours();
var m = currentday.getMinutes();
var th = gP(h, m);
var ch = $dvtec.attr("clientHeight");
var sh = th - 0.5 * ch;
var ph = $dvtec.attr("scrollHeight");
if (sh < 0) sh = 0;
if (sh > ph - ch) sh = ph - ch - 10 * (23 - h);
$dvtec.attr("scrollTop", sh);
}
else {
$dvtec.attr("scrollTop", option.scoll);
}
}
else if (_viewType == "month") {
//Resize GridContainer
}
}
function returnfalse() {
return false;
}
function initevents(viewtype) {
if (viewtype == "week" || viewtype == "day") {
$("div.chip", gridcontainer).each(function(i) {
var chip = $(this);
chip.click(dayshow);
if (chip.hasClass("drag")) {
chip.mousedown(function(e) { dragStart.call(this, "dw3", e); return false; });
//resize
chip.find("div.resizer").mousedown(function(e) {
dragStart.call($(this).parent().parent(), "dw4", e); return false;
});
}
else {
chip.mousedown(returnfalse)
}
});
$("div.rb-o", gridcontainer).each(function(i) {
var chip = $(this);
chip.click(dayshow);
if (chip.hasClass("drag") && viewtype == "week") {
//drag;
chip.mousedown(function(e) { dragStart.call(this, "dw5", e); return false; });
}
else {
chip.mousedown(returnfalse)
}
});
if (option.readonly == false) {
$("td.tg-col", gridcontainer).each(function(i) {
$(this).mousedown(function(e) { dragStart.call(this, "dw1", e); return false; });
});
$("#weekViewAllDaywk").mousedown(function(e) { dragStart.call(this, "dw2", e); return false; });
}
if (viewtype == "week") {
$("#dvwkcontaienr th.gcweekname").each(function(i) {
$(this).click(weekormonthtoday);
});
}
}
else if (viewtype = "month") {
$("div.rb-o", gridcontainer).each(function(i) {
var chip = $(this);
chip.click(dayshow);
if (chip.hasClass("drag")) {
//drag;
chip.mousedown(function(e) { dragStart.call(this, "m2", e); return false; });
}
else {
chip.mousedown(returnfalse)
}
});
$("td.st-more", gridcontainer).each(function(i) {
$(this).click(function(e) {
moreshow.call(this, $(this).parent().parent().parent().parent()[0]); return false;
}).mousedown(function() { return false; });
});
if (option.readonly == false) {
$("#mvEventContainer").mousedown(function(e) { dragStart.call(this, "m1", e); return false; });
}
}
}
function realsedragevent() {
if (_dragevent) {
_dragevent();
_dragevent = null;
}
}
function dragStart(type, e) {
var obj = $(this);
var source = e.srcElement || e.target;
realsedragevent();
switch (type) {
case "dw1":
_dragdata = { type: 1, target: obj, sx: e.pageX, sy: e.pageY };
break;
case "dw2":
var w = obj.width();
var h = obj.height();
var offset = obj.offset();
var left = offset.left;
var top = offset.top;
var l = option.view == "day" ? 1 : 7;
var py = w % l;
var pw = parseInt(w / l);
if (py > l / 2 + 1) {
pw++;
}
var xa = [];
var ya = [];
for (var i = 0; i < l; i++) {
xa.push({ s: i * pw + left, e: (i + 1) * pw + left });
}
ya.push({ s: top, e: top + h });
_dragdata = { type: 2, target: obj, sx: e.pageX, sy: e.pageY, pw: pw, xa: xa, ya: ya, h: h };
w = left = l = py = pw = xa = null;
break;
case "dw3":
var evid = obj.parent().attr("id").replace("tgCol", "");
var p = obj.parent();
var pos = p.offset();
var w = p.width() + 10;
var h = obj.height();
var data = getdata(obj);
_dragdata = { type: 4, target: obj, sx: e.pageX, sy: e.pageY,
pXMin: pos.left, pXMax: pos.left + w, pw: w, h: h,
cdi: parseInt(evid), fdi: parseInt(evid), data: data
};
break;
case "dw4": //resize;
var h = obj.height();
var data = getdata(obj);
_dragdata = { type: 5, target: obj, sx: e.pageX, sy: e.pageY, h: h, data: data };
break;
case "dw5":
var con = $("#weekViewAllDaywk");
var w = con.width();
var h = con.height();
var offset = con.offset();
var moffset = obj.offset();
var left = offset.left;
var top = offset.top;
var l = 7;
var py = w % l;
var pw = parseInt(w / l);
if (py > l / 2 + 1) {
pw++;
}
var xa = [];
var ya = [];
var di = 0;
for (var i = 0; i < l; i++) {
xa.push({ s: i * pw + left, e: (i + 1) * pw + left });
if (moffset.left >= xa[i].s && moffset.left < xa[i].e) {
di = i;
}
}
var fdi = { x: di, y: 0, di: di };
ya.push({ s: top, e: top + h });
var data = getdata(obj);
var dp = DateDiff("d", data[2], data[3]) + 1;
_dragdata = { type: 6, target: obj, sx: e.pageX, sy: e.pageY, data: data, xa: xa, ya: ya, fdi: fdi, h: h, dp: dp, pw: pw };
break;
case "m1":
var w = obj.width();
var offset = obj.offset();
var left = offset.left;
var top = offset.top;
var l = 7;
var yl = obj.children().length;
var py = w % l;
var pw = parseInt(w / l);
if (py > l / 2 + 1) {
pw++;
}
var h = $("#mvrow_0").height();
var xa = [];
var ya = [];
for (var i = 0; i < l; i++) {
xa.push({ s: i * pw + left, e: (i + 1) * pw + left });
}
var xa = [];
var ya = [];
for (var i = 0; i < l; i++) {
xa.push({ s: i * pw + left, e: (i + 1) * pw + left });
}
for (var i = 0; i < yl; i++) {
ya.push({ s: i * h + top, e: (i + 1) * h + top });
}
_dragdata = { type: 3, target: obj, sx: e.pageX, sy: e.pageY, pw: pw, xa: xa, ya: ya, h: h };
break;
case "m2":
var row0 = $("#mvrow_0");
var row1 = $("#mvrow_1");
var w = row0.width();
var offset = row0.offset();
var diffset = row1.offset();
var moffset = obj.offset();
var h = diffset.top - offset.top;
var left = offset.left;
var top = offset.top;
var l = 7;
var yl = row0.parent().children().length;
var py = w % l;
var pw = parseInt(w / l);
if (py > l / 2 + 1) {
pw++;
}
var xa = [];
var ya = [];
var xi = 0;
var yi = 0;
for (var i = 0; i < l; i++) {
xa.push({ s: i * pw + left, e: (i + 1) * pw + left });
if (moffset.left >= xa[i].s && moffset.left < xa[i].e) {
xi = i;
}
}
for (var i = 0; i < yl; i++) {
ya.push({ s: i * h + top, e: (i + 1) * h + top });
if (moffset.top >= ya[i].s && moffset.top < ya[i].e) {
yi = i;
}
}
var fdi = { x: xi, y: yi, di: yi * 7 + xi };
var data = getdata(obj);
var dp = DateDiff("d", data[2], data[3]) + 1;
_dragdata = { type: 7, target: obj, sx: e.pageX, sy: e.pageY, data: data, xa: xa, ya: ya, fdi: fdi, h: h, dp: dp, pw: pw };
break;
}
$('body').noSelect();
}
function dragMove(e) {
if (_dragdata) {
if (e.pageX < 0 || e.pageY < 0
|| e.pageX > document.documentElement.clientWidth
|| e.pageY >= document.documentElement.clientHeight) {
dragEnd(e);
return false;
}
var d = _dragdata;
switch (d.type) {
case 1:
var sy = d.sy;
var y = e.pageY;
var diffy = y - sy;
if (diffy > 11 || diffy < -11 || d.cpwrap) {
if (diffy == 0) { diffy = 21; }
var dy = diffy % 21;
if (dy != 0) {
diffy = dy > 0 ? diffy + 21 - dy : diffy - 21 - dy;
y = d.sy + diffy;
if (diffy < 0) {
sy = sy + 21;
}
}
if (!d.tp) {
d.tp = $(d.target).offset().top;
}
var gh = gH(sy, y, d.tp);
var ny = gP(gh.sh, gh.sm);
var tempdata;
if (!d.cpwrap) {
tempdata = buildtempdayevent(gh.sh, gh.sm, gh.eh, gh.em, gh.h);
var cpwrap = $("
").html(tempdata);
$(d.target).find("div.tg-col-overlaywrapper").append(cpwrap);
d.cpwrap = cpwrap;
}
else {
if (d.cgh.sh != gh.sh || d.cgh.eh != gh.eh || d.cgh.sm != gh.sm || d.cgh.em != gh.em) {
tempdata = buildtempdayevent(gh.sh, gh.sm, gh.eh, gh.em, gh.h);
d.cpwrap.css("top", ny + "px").html(tempdata);
}
}
d.cgh = gh;
}
break;
case 2:
var sx = d.sx;
var x = e.pageX;
var diffx = x - sx;
if (diffx > 5 || diffx < -5 || d.lasso) {
if (!d.lasso) {
d.lasso = $("
");
$(document.body).append(d.lasso);
}
if (!d.sdi) {
d.sdi = getdi(d.xa, d.ya, sx, d.sy);
}
var ndi = getdi(d.xa, d.ya, x, e.pageY);
if (!d.fdi || d.fdi.di != ndi.di) {
addlasso(d.lasso, d.sdi, ndi, d.xa, d.ya, d.h);
}
d.fdi = ndi;
}
break;
case 3:
var sx = d.sx;
var x = e.pageX;
var sy = d.sy;
var y = e.pageY;
var diffx = x - sx;
var diffy = y - sy;
if (diffx > 5 || diffx < -5 || diffy < -5 || diffy > 5 || d.lasso) {
if (!d.lasso) {
d.lasso = $("
");
$(document.body).append(d.lasso);
}
if (!d.sdi) {
d.sdi = getdi(d.xa, d.ya, sx, sy);
}
var ndi = getdi(d.xa, d.ya, x, y);
if (!d.fdi || d.fdi.di != ndi.di) {
addlasso(d.lasso, d.sdi, ndi, d.xa, d.ya, d.h);
}
d.fdi = ndi;
}
break;
case 4:
var data = d.data;
if (data != null && data[8] == 1) {
var sx = d.sx;
var x = e.pageX;
var sy = d.sy;
var y = e.pageY;
var diffx = x - sx;
var diffy = y - sy;
if (diffx > 5 || diffx < -5 || diffy > 5 || diffy < -5 || d.cpwrap) {
var gh, ny, tempdata;
if (!d.cpwrap) {
gh = { sh: data[2].getHours(),
sm: data[2].getMinutes(),
eh: data[3].getHours(),
em: data[3].getMinutes(),
h: d.h
};
d.target.hide();
ny = gP(gh.sh, gh.sm);
d.top = ny;
tempdata = buildtempdayevent(gh.sh, gh.sm, gh.eh, gh.em, gh.h, data[1], false, false, data[7]);
var cpwrap = $("
").html(tempdata);
var evid = d.target.parent().attr("id").replace("tgCol", "#tgOver");
$(evid).append(cpwrap);
d.cpwrap = cpwrap;
d.ny = ny;
}
else {
var pd = 0;
if (x < d.pXMin) {
pd = -1;
}
else if (x > d.pXMax) {
pd = 1;
}
if (pd != 0) {
d.cdi = d.cdi + pd;
var ov = $("#tgOver" + d.cdi);
if (ov.length == 1) {
d.pXMin = d.pXMin + d.pw * pd;
d.pXMax = d.pXMax + d.pw * pd;
ov.append(d.cpwrap);
}
else {
d.cdi = d.cdi - pd;
}
}
ny = d.top + diffy;
var pny = ny % 21;
if (pny != 0) {
ny = ny - pny;
}
if (d.ny != ny) {
//log.info("ny=" + ny);
gh = gW(ny, ny + d.h);
//log.info("sh=" + gh.sh + ",sm=" + gh.sm);
tempdata = buildtempdayevent(gh.sh, gh.sm, gh.eh, gh.em, gh.h, data[1], false, false, data[7]);
d.cpwrap.css("top", ny + "px").html(tempdata);
}
d.ny = ny;
}
}
}
break;
case 5:
var data = d.data;
if (data != null && data[8] == 1) {
var sy = d.sy;
var y = e.pageY;
var diffy = y - sy;
if (diffy != 0 || d.cpwrap) {
var gh, ny, tempdata;
if (!d.cpwrap) {
gh = { sh: data[2].getHours(),
sm: data[2].getMinutes(),
eh: data[3].getHours(),
em: data[3].getMinutes(),
h: d.h
};
d.target.hide();
ny = gP(gh.sh, gh.sm);
d.top = ny;
tempdata = buildtempdayevent(gh.sh, gh.sm, gh.eh, gh.em, gh.h, data[1], "100%", true, data[7]);
var cpwrap = $("
").html(tempdata);
var evid = d.target.parent().attr("id").replace("tgCol", "#tgOver");
$(evid).append(cpwrap);
d.cpwrap = cpwrap;
}
else {
nh = d.h + diffy;
var pnh = nh % 21;
nh = pnh > 1 ? nh - pnh + 21 : nh - pnh;
if (d.nh != nh) {
var sp = gP(data[2].getHours(), data[2].getMinutes());
var ep = sp + nh;
gh = gW(d.top, d.top + nh);
tempdata = buildtempdayevent(gh.sh, gh.sm, gh.eh, gh.em, gh.h, data[1], "100%", true, data[7]);
d.cpwrap.html(tempdata);
}
d.nh = nh;
}
}
}
break;
case 6:
var sx = d.sx;
var x = e.pageX;
var y = e.pageY;
var diffx = x - sx;
if (diffx > 5 || diffx < -5 || d.lasso) {
if (!d.lasso) {
var w1 = d.dp > 1 ? (d.pw - 4) * 1.5 : (d.pw - 4);
var cp = d.target.clone();
if (d.dp > 1) {
cp.find("div.rb-i>span").prepend("(" + d.dp + " " + i18n.xgcalendar.day_plural + ") ");
}
var cpwrap = $("
").append(cp).appendTo(document.body);
d.cpwrap = cpwrap;
d.lasso = $("
");
$(document.body).append(d.lasso);
cp = cpwrap = null;
}
fixcppostion(d.cpwrap, e, d.xa, d.ya);
var ndi = getdi(d.xa, d.ya, x, e.pageY);
if (!d.cdi || d.cdi.di != ndi.di) {
addlasso(d.lasso, ndi, { x: ndi.x, y: ndi.y, di: ndi.di + d.dp - 1 }, d.xa, d.ya, d.h);
}
d.cdi = ndi;
}
break;
case 7:
var sx = d.sx;
var sy = d.sy;
var x = e.pageX;
var y = e.pageY;
var diffx = x - sx;
var diffy = y - sy;
if (diffx > 5 || diffx < -5 || diffy > 5 || diffy < -5 || d.lasso) {
if (!d.lasso) {
var w1 = d.dp > 1 ? (d.pw - 4) * 1.5 : (d.pw - 4);
var cp = d.target.clone();
if (d.dp > 1) {
cp.find("div.rb-i>span").prepend("(" + d.dp + " " + i18n.xgcalendar.day_plural + ") ");
}
var cpwrap = $("
").append(cp).appendTo(document.body);
d.cpwrap = cpwrap;
d.lasso = $("
");
$(document.body).append(d.lasso);
cp = cpwrap = null;
}
fixcppostion(d.cpwrap, e, d.xa, d.ya);
var ndi = getdi(d.xa, d.ya, x, e.pageY);
if (!d.cdi || d.cdi.di != ndi.di) {
addlasso(d.lasso, ndi, { x: ndi.x, y: ndi.y, di: ndi.di + d.dp - 1 }, d.xa, d.ya, d.h);
}
d.cdi = ndi;
}
break;
}
}
return false;
}
function dragEnd(e) {
if (_dragdata) {
var d = _dragdata;
switch (d.type) {
case 1: //day view
var wrapid = new Date().getTime();
tp = d.target.offset().top;
if (!d.cpwrap) {
var gh = gH(d.sy, d.sy + 42, tp);
var ny = gP(gh.sh, gh.sm);
var tempdata = buildtempdayevent(gh.sh, gh.sm, gh.eh, gh.em, gh.h);
d.cpwrap = $("
").html(tempdata);
$(d.target).find("div.tg-col-overlaywrapper").append(d.cpwrap);
d.cgh = gh;
}
var pos = d.cpwrap.offset();
pos.left = pos.left + 30;
d.cpwrap.attr("id", wrapid);
var start = strtodate(d.target.attr("abbr") + " " + d.cgh.sh + ":" + d.cgh.sm);
var end = strtodate(d.target.attr("abbr") + " " + d.cgh.eh + ":" + d.cgh.em);
_dragevent = function() { $("#" + wrapid).remove(); $("#bbit-cal-buddle").css("visibility", "hidden"); };
quickadd(start, end, false, pos);
break;
case 2: //week view
case 3: //month view
var source = e.srcElement || e.target;
var lassoid = new Date().getTime();
if (!d.lasso) {
if ($(source).hasClass("monthdayshow"))
{
weekormonthtoday.call($(source).parent()[0],e);
break;
}
d.fdi = d.sdi = getdi(d.xa, d.ya, d.sx, d.sy);
d.lasso = $("
");
$(document.body).append(d.lasso);
addlasso(d.lasso, d.sdi, d.fdi, d.xa, d.ya, d.h);
}
d.lasso.attr("id", lassoid);
var si = Math.min(d.fdi.di, d.sdi.di);
var ei = Math.max(d.fdi.di, d.sdi.di);
var firstday = option.vstart;
var start = DateAdd("d", si, firstday);
var end = DateAdd("d", ei, firstday);
_dragevent = function() { $("#" + lassoid).remove(); };
quickadd(start, end, true, { left: e.pageX, top: e.pageY });
break;
case 4: // event moving
if (d.cpwrap) {
var start = DateAdd("d", d.cdi, option.vstart);
var end = DateAdd("d", d.cdi, option.vstart);
var gh = gW(d.ny, d.ny + d.h);
start.setHours(gh.sh, gh.sm);
end.setHours(gh.eh, gh.em);
if (start.getTime() == d.data[2].getTime() && end.getTime() == d.data[3].getTime()) {
d.cpwrap.remove();
d.target.show();
}
else {
dayupdate(d.data, start, end);
}
}
break;
case 5: //Resize
if (d.cpwrap) {
var start = new Date(d.data[2].toString());
var end = new Date(d.data[3].toString());
var gh = gW(d.top, d.top + nh);
start.setHours(gh.sh, gh.sm);
end.setHours(gh.eh, gh.em);
if (start.getTime() == d.data[2].getTime() && end.getTime() == d.data[3].getTime()) {
d.cpwrap.remove();
d.target.show();
}
else {
dayupdate(d.data, start, end);
}
}
break;
case 6:
case 7:
if (d.lasso) {
d.cpwrap.remove();
d.lasso.remove();
var start = new Date(d.data[2].toString());
var end = new Date(d.data[3].toString());
var currrentdate = DateAdd("d", d.cdi.di, option.vstart);
var diff = DateDiff("d", start, currrentdate);
start = DateAdd("d", diff, start);
end = DateAdd("d", diff, end);
if (start.getTime() != d.data[2].getTime() || end.getTime() != d.data[3].getTime()) {
dayupdate(d.data, start, end);
}
}
break;
}
d = _dragdata = null;
$('body').noSelect(false);
return false;
}
}
function getdi(xa, ya, x, y) {
var ty = 0;
var tx = 0;
var lx = 0;
var ly = 0;
if (xa && xa.length != 0) {
lx = xa.length;
if (x >= xa[lx - 1].e) {
tx = lx - 1;
}
else {
for (var i = 0; i < lx; i++) {
if (x > xa[i].s && x <= xa[i].e) {
tx = i;
break;
}
}
}
}
if (ya && ya.length != 0) {
ly = ya.length;
if (y >= ya[ly - 1].e) {
ty = ly - 1;
}
else {
for (var j = 0; j < ly; j++) {
if (y > ya[j].s && y <= ya[j].e) {
ty = j;
break;
}
}
}
}
return { x: tx, y: ty, di: ty * lx + tx };
}
function addlasso(lasso, sdi, edi, xa, ya, height) {
var diff = sdi.di > edi.di ? sdi.di - edi.di : edi.di - sdi.di;
diff++;
var sp = sdi.di > edi.di ? edi : sdi;
var ep = sdi.di > edi.di ? sdi : edi;
var l = xa.length > 0 ? xa.length : 1;
var h = ya.length > 0 ? ya.length : 1;
var play = [];
var width = xa[0].e - xa[0].s;
var i = sp.x;
var j = sp.y;
var max = Math.min(document.documentElement.clientWidth, xa[l - 1].e) - 2;
while (j < h && diff > 0) {
var left = xa[i].s;
var d = i + diff > l ? l - i : diff;
var wid = width * d;
while (left + wid >= max) {
wid--;
}
play.push(Tp(__LASSOTEMP, { left: left, top: ya[j].s, height: height, width: wid }));
i = 0;
diff = diff - d;
j++;
}
lasso.html(play.join(""));
}
function fixcppostion(cpwrap, e, xa, ya) {
var x = e.pageX - 6;
var y = e.pageY - 4;
var w = cpwrap.width();
var h = 21;
var lmin = xa[0].s + 6;
var tmin = ya[0].s + 4;
var lmax = xa[xa.length - 1].e - w - 2;
var tmax = ya[ya.length - 1].e - h - 2;
if (x > lmax) {
x = lmax;
}
if (x <= lmin) {
x = lmin + 1;
}
if (y <= tmin) {
y = tmin + 1;
}
if (y > tmax) {
y = tmax;
}
cpwrap.css({ left: x, top: y });
}
$(document)
.mousemove(dragMove)
.mouseup(dragEnd);
//.mouseout(dragEnd);
var c = {
sv: function(view) { //switch view
if (view == option.view) {
return;
}
clearcontainer();
option.view = view;
render();
dochange();
},
rf: function() {
populate();
},
gt: function(d) {
if (!d) {
d = new Date();
}
option.showday = d;
render();
dochange();
},
pv: function() {
switch (option.view) {
case "day":
option.showday = DateAdd("d", -1, option.showday);
break;
case "week":
option.showday = DateAdd("w", -1, option.showday);
break;
case "month":
option.showday = DateAdd("m", -1, option.showday);
break;
}
render();
dochange();
},
nt: function() {
switch (option.view) {
case "day":
option.showday = DateAdd("d", 1, option.showday);
break;
case "week":
option.showday = DateAdd("w", 1, option.showday);
break;
case "month":
var od = option.showday.getDate();
option.showday = DateAdd("m", 1, option.showday);
var nd = option.showday.getDate();
if(od !=nd) //we go to the next month
{
option.showday= DateAdd("d", 0-nd, option.showday); //last day of last month
}
break;
}
render();
dochange();
},
go: function() {
return option;
},
so: function(p) {
option = $.extend(option, p);
}
};
this[0].bcal = c;
return this;
};
/**
* @description {Method} swtichView To switch to another view.
* @param {String} view View name, one of 'day', 'week', 'month'.
*/
$.fn.swtichView = function(view) {
return this.each(function() {
if (this.bcal) {
this.bcal.sv(view);
}
})
};
/**
* @description {Method} reload To reload event of current time range.
*/
$.fn.reload = function() {
return this.each(function() {
if (this.bcal) {
this.bcal.rf();
}
})
};
/**
* @description {Method} gotoDate To go to a range containing date.
* If view is week, it will go to a week containing date.
* If view is month, it will got to a month containing date.
* @param {Date} date. Date to go.
*/
$.fn.gotoDate = function(d) {
return this.each(function() {
if (this.bcal) {
this.bcal.gt(d);
}
})
};
/**
* @description {Method} previousRange To go to previous date range.
* If view is week, it will go to previous week.
* If view is month, it will got to previous month.
*/
$.fn.previousRange = function() {
return this.each(function() {
if (this.bcal) {
this.bcal.pv();
}
})
};
/**
* @description {Method} nextRange To go to next date range.
* If view is week, it will go to next week.
* If view is month, it will got to next month.
*/
$.fn.nextRange = function() {
return this.each(function() {
if (this.bcal) {
this.bcal.nt();
}
})
};
$.fn.BcalGetOp = function() {
if (this[0].bcal) {
return this[0].bcal.go();
}
return null;
};
$.fn.BcalSetOp = function(p) {
if (this[0].bcal) {
return this[0].bcal.so(p);
}
};
})(jQuery);