/* dhtmlxScheduler v.4.3.0 Stardard This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. (c) Dinamenta, UAB. */ (function() { var dx, dy, html_regexp = new RegExp("<[^>]*>", "g"), newline_regexp = new RegExp("]*>", "g"); function clean_html(val) { return val.replace(newline_regexp, "\n").replace(html_regexp, ""); } function x_norm(x, offset) { x = parseFloat(x); offset = parseFloat(offset); if (!isNaN(offset)) x -= offset; var w = colsWidth(x); x = x - w.width + w.cols*dx; return isNaN(x)?"auto":(100*x/(dx)); } function x_norm_event(x, offset, is_left) { x = parseFloat(x); offset = parseFloat(offset); if (!isNaN(offset) && is_left) x -= offset; var w = colsWidth(x); x = x - w.width + w.cols*dx; return isNaN(x)?"auto":(100*x/(dx-(!isNaN(offset)?offset:0))); } function colsWidth(width) { var r = 0; var header = scheduler._els.dhx_cal_header[0].childNodes; var els = header[1] ? header[1].childNodes : header[0].childNodes; for (var i = 0; i < els.length; i++) { var el = els[i].style ? els[i] : els[i].parentNode; var w = parseFloat(el.style.width); if (width > w){ width -= (w+1); r+=(w+1); } else break; } return { width: r, cols: i }; } function y_norm(y) { y = parseFloat(y); if (isNaN(y)) return "auto"; return 100 * y / dy; } function get_style(node, style){ return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||""; } function de_day(node, n) { var x = parseInt(node.style.left, 10); for (var dx = 0; dx < scheduler._cols.length; dx++) { x -= scheduler._cols[dx]; if (x < 0) return dx; } return n; } function de_week(node, n) { var y = parseInt(node.style.top, 10); for (var dy = 0; dy < scheduler._colsS.heights.length; dy++) if (scheduler._colsS.heights[dy] > y) return dy; return n; } function xml_start(tag) { return tag ? "<"+tag+">" : ""; } function xml_end(tag) { return tag ? "" : ""; } function xml_top(tag, profile, header, footer) { var xml = "<"+tag+" profile='" + profile + "'"; if (header) xml += " header='" + header + "'"; if (footer) xml += " footer='" + footer + "'"; xml += ">"; return xml; } function xml_body_header() { var xml = ""; // detects if current mode is timeline var mode = scheduler._mode; if (scheduler.matrix && scheduler.matrix[scheduler._mode]) mode = (scheduler.matrix[scheduler._mode].render == "cell") ? "matrix" : "timeline"; xml += ""; if (scheduler._mode == "week_agenda") { var xh = scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV"); for (var i = 0; i < xh.length; i++) if (xh[i].className == "dhx_wa_scale_bar") xml += "" + clean_html(xh[i].innerHTML) + ""; } else if (scheduler._mode == "agenda" || scheduler._mode == "map") { var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes; xml += "" + clean_html(xh[0].innerHTML) + "" + clean_html(xh[1].innerHTML) + ""; } else if (scheduler._mode == "year") { var xh = scheduler._els.dhx_cal_data[0].childNodes; for (var i = 0; i < xh.length; i++) { xml += ""; xml += xml_month_scale(xh[i].childNodes[1].childNodes); xml += xml_month(xh[i].childNodes[2]); xml += ""; } } else { xml += ""; var xh = scheduler._els.dhx_cal_header[0].childNodes; xml += xml_month_scale(xh); xml += ""; var yh = scheduler._els.dhx_cal_data[0]; if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { xml += ""; for (var i = 0; i < yh.firstChild.rows.length; i++) { var el = yh.firstChild.rows[i]; xml += ""; } xml += ""; dy = yh.firstChild.rows[0].cells[0].offsetHeight; } else if (yh.firstChild.tagName == "TABLE") { xml += xml_month(yh); } else { yh = yh.childNodes[yh.childNodes.length - 1]; while (yh.className.indexOf("dhx_scale_holder") == -1) yh = yh.previousSibling; yh = yh.childNodes; xml += ""; for (var i = 0; i < yh.length; i++) xml += "\n"; xml += ""; dy = yh[0].offsetHeight; } } xml += ""; return xml; } function xml_month(yh) { var xml = ""; var r = yh.firstChild.rows; for (var i = 0; i < r.length; i++) { var days = []; for (var j = 0; j < r[i].cells.length; j++) days.push(r[i].cells[j].firstChild.innerHTML); xml += "\n"; dy = yh.firstChild.rows[0].cells[0].offsetHeight; } return xml; } function xml_month_scale(xh) { var xhs, xml = ""; if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { if (scheduler.matrix[scheduler._mode].second_scale) xhs = xh[1].childNodes; xh = xh[0].childNodes; } for (var i = 0; i < xh.length; i++) xml += "\n"; dx = xh[0].offsetWidth; if (xhs) { var width = 0; var top_width = xh[0].offsetWidth; var top_col = 1; for (var i = 0; i < xhs.length; i++) { xml += "\n"; width += xhs[i].offsetWidth; if (width >= top_width) { top_width += (xh[top_col] ? xh[top_col].offsetWidth : 0); top_col++; } dx = xhs[0].offsetWidth; } } return xml; } function xml_body(colors) { var xml = ""; var evs = scheduler._rendered; var matrix = scheduler.matrix && scheduler.matrix[scheduler._mode]; if (scheduler._mode == "agenda" || scheduler._mode == "map") { for (var i = 0; i < evs.length; i++) xml += ""; } else if (scheduler._mode == "week_agenda") { for (var i = 0; i < evs.length; i++) xml += "" + clean_html(evs[i].innerHTML) + ""; } else if (scheduler._mode == "year") { var evs = scheduler.get_visible_events(); for (var i = 0; i < evs.length; i++) { var d = evs[i].start_date; if (d.valueOf() < scheduler._min_date.valueOf()) d = scheduler._min_date; while (d < evs[i].end_date) { var m = d.getMonth() + 12 * (d.getFullYear() - scheduler._min_date.getFullYear()) - scheduler.week_starts._month; var day = scheduler.week_starts[m] + d.getDate() - 1; var text_color = colors ? get_style(scheduler._get_year_cell(d), "color") : ""; var bg_color = colors ? get_style(scheduler._get_year_cell(d), "backgroundColor") : ""; xml += ""; d = scheduler.date.add(d, 1, "day"); if (d.valueOf() >= scheduler._max_date.valueOf()) break; } } } else if (matrix && matrix.render == "cell") { var evs = scheduler._els.dhx_cal_data[0].getElementsByTagName("TD"); for (var i = 0; i < evs.length; i++) { var text_color = colors ? get_style(evs[i], "color") : ""; var bg_color = colors ? get_style(evs[i], "backgroundColor") : ""; xml += "\n"; } } else { for (var i = 0; i < evs.length; i++) { var zx, zdx; if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { // logic for timeline view zx = x_norm(evs[i].style.left); zdx = x_norm(evs[i].offsetWidth)-1; } else { // we should use specific logic for day/week/units view var left_norm = scheduler.config.use_select_menu_space ? 0 : 26; zx = x_norm_event(evs[i].style.left, left_norm, true); zdx = x_norm_event(evs[i].style.width, left_norm)-1; } if (isNaN(zdx * 1)) continue; var zy = y_norm(evs[i].style.top); var zdy = y_norm(evs[i].style.height); var e_type = evs[i].className.split(" ")[0].replace("dhx_cal_", ""); if (e_type === 'dhx_tooltip_line') continue; var dets = scheduler.getEvent(evs[i].getAttribute("event_id")); if (!dets) continue; var day = dets._sday; var week = dets._sweek; var length = dets._length || 0; if (scheduler._mode == "month") { zdy = parseInt(evs[i].offsetHeight, 10); zy = parseInt(evs[i].style.top, 10) - scheduler.xy.month_head_height; day = de_day(evs[i], day); week = de_week(evs[i], week); } else if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { day = 0; var el = evs[i].parentNode.parentNode.parentNode; week = el.rowIndex; var dy_copy = dy; dy = evs[i].parentNode.offsetHeight; zy = y_norm(evs[i].style.top); zy -= zy * 0.2; dy = dy_copy; } else { if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue; var parent = scheduler._els["dhx_cal_data"][0].childNodes[0]; var offset = parseFloat(parent.className.indexOf("dhx_scale_holder") != -1 ? parent.style.left : 0); zx += x_norm(evs[i].parentNode.style.left, offset); } xml += "\n"; if (e_type == "event") { xml += "
"; var text_color = colors ? get_style(evs[i].childNodes[2], "color") : ""; var bg_color = colors ? get_style(evs[i].childNodes[2], "backgroundColor") : ""; xml += ""; } else { var text_color = colors ? get_style(evs[i], "color") : ""; var bg_color = colors ? get_style(evs[i], "backgroundColor") : ""; xml += ""; } xml += "
"; } } return xml; } function to_pdf(start, end, view, url, mode, header, footer) { var colors = false; if (mode == "fullcolor") { colors = true; mode = "color"; } mode = mode || "color"; var uid = scheduler.uid(); var d = document.createElement("div"); d.style.display = "none"; document.body.appendChild(d); d.innerHTML = '
'; var xml = ""; if (start) { var original_date = scheduler._date; var original_mode = scheduler._mode; end = scheduler.date[view+"_start"](end); end = scheduler.date["get_"+view+"_end"] ? scheduler.date["get_"+view+"_end"](end) : scheduler.date.add(end, 1, view); xml = xml_top("pages", mode, header, footer); for (var temp_date = new Date(start); +temp_date < +end; temp_date = scheduler.date.add(temp_date, 1, view)) { scheduler.setCurrentView(temp_date, view); xml += xml_start("page") + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("page"); } xml += xml_end("pages"); scheduler.setCurrentView(original_date, original_mode); } else { xml = xml_top("data", mode, header, footer) + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("data"); } document.getElementById(uid).firstChild.value = encodeURIComponent(xml); document.getElementById(uid).submit(); d.parentNode.removeChild(d); } scheduler.toPDF = function(url, mode, header, footer) { return to_pdf.apply(this, [null, null, null, url, mode, header, footer]); }; scheduler.toPDFRange = function(start, end, view, url, mode, header, footer) { if (typeof start == "string") { start = scheduler.templates.api_date(start); end = scheduler.templates.api_date(end); } return to_pdf.apply(this, arguments); }; })();