Files
MYSOPHAL/lib/jqueryplugins/jquery-gantt/js/jquery.fn.gantt.min.js
2025-08-07 13:15:31 +01:00

7 lines
28 KiB
JavaScript

/**
* jQuery Gantt Chart
*
* @see http://taitems.github.io/jQuery.Gantt/
* @license MIT
*/
(function(e,a){"use strict";var t=24*60*60*1e3;function n(a,t){var n=new Date(parseInt(t,10));n.setHours(0,0,0,0);var i=e(a).attr("id")||"";var l=i.indexOf("-")+1;var s=new Date(parseInt(i.substring(l,i.length),10));s.setHours(0,0,0,0);return n.getTime()===s.getTime()}e.expr[":"].findday=e.expr.createPseudo?e.expr.createPseudo((function(e){return function(a){return n(a,e)}})):function(e,a,t){return n(e,t[3])};function i(a,t){var n=new Date(parseInt(t,10));var i=n.getFullYear();var l=n.getWeekOfYear();var s=n.getMonth();if(s===11&&l===1){i++}else if(!s&&l>51){i--}n=i+"-"+l;var r=e(a).attr("id")||"";var o=r.indexOf("-")+1;var d=r.substring(o,r.length);return n===d}e.expr[":"].findweek=e.expr.createPseudo?e.expr.createPseudo((function(e){return function(a){return i(a,e)}})):function(e,a,t){return i(e,t[3])};function l(a,t){var n=new Date(parseInt(t,10));n=n.getFullYear()+"-"+n.getMonth();var i=e(a).attr("id")||"";var l=i.indexOf("-")+1;var s=i.substring(l,i.length);return n===s}e.expr[":"].findmonth=e.expr.createPseudo?e.expr.createPseudo((function(e){return function(a){return l(a,e)}})):function(e,a,t){return l(e,t[3])};Date.prototype.getWeekId=function(){var e=this.getFullYear();var a=this.getWeekOfYear();var t=this.getMonth();if(t===11&&a===1){e++}else if(!t&&a>51){e--}return"dh-"+e+"-"+a};Date.prototype.getRepDate=function(e){switch(e){case"hours":return this.getTime();case"weeks":return this.getDayForWeek().getTime();case"months":return new Date(this.getFullYear(),this.getMonth(),1).getTime();case"days":default:return this.getTime()}};Date.prototype.getDayOfYear=function(){var e=this.getFullYear();return(Date.UTC(e,this.getMonth(),this.getDate())-Date.UTC(e,0,0))/t};var s=1;var r=4;Date.prototype.getWeekOfYear=function(){var e=this.getFullYear(),a=this.getMonth(),t=this.getDate(),n=this.getDay();var i=r-n;if(n<s){i-=7}if(i+7<r-s){i+=7}return Math.ceil(new Date(e,a,t+i).getDayOfYear()/7)};Date.prototype.getDayForWeek=function(){var e=this.getDay();var a=(e<s?-7:0)+s-e;return new Date(this.getFullYear(),this.getMonth(),this.getDate()+a)};function o(e,a){for(var t=1;;t++){var n=new Date(e);n.setHours(e.getHours()+a*t);if(n.getTime()!==e.getTime()){return n}}}e.fn.gantt=function(n){var i=["hours","days","weeks","months"];var l={source:[],holidays:[],itemsPerPage:7,dow:["S","M","T","W","T","F","S"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],waitText:"Please wait...",navigate:"buttons",scrollToToday:true,useCookie:false,cookieKey:"jquery.fn.gantt",scale:"days",maxScale:"months",minScale:"hours",onItemClick:function(e){return},onAddClick:function(e,a){return},onRender:e.noop};e.extend(l,n);l.useCookie=l.useCookie&&e.isFunction(e.cookie);var s={elementFromPoint:function(){if(document.compatMode==="CSS1Compat"){return function(e,a){e-=window.pageXOffset;a-=window.pageYOffset;return document.elementFromPoint(e,a)}}return function(a,t){a-=e(document).scrollLeft();t-=e(document).scrollTop();return document.elementFromPoint(a,t)}}(),create:function(a){if(typeof l.source!=="string"){a.data=l.source;s.init(a)}else{e.getJSON(l.source,(function(e){a.data=e;s.init(a)}))}},init:function(e){e.rowsNum=e.data.length;e.pageCount=Math.ceil(e.rowsNum/l.itemsPerPage);e.rowsOnLastPage=e.rowsNum-Math.floor(e.rowsNum/l.itemsPerPage)*l.itemsPerPage;e.dateStart=r.getMinDate(e);e.dateEnd=r.getMaxDate(e);s.waitToggle(e,(function(){s.render(e)}))},render:function(a){var t=e('<div class="fn-content"/>');var n=s.leftPanel(a);t.append(n);var i=s.rightPanel(a,n);var r,o;t.append(i);t.append(s.navigation(a));var d=i.find(".dataPanel");a.gantt=e('<div class="fn-gantt" />').append(t);e(a).empty().append(a.gantt);a.scrollNavigation.panelMargin=parseInt(d.css("margin-left").replace("px",""),10);a.scrollNavigation.panelMaxPos=d.width()-i.width();a.scrollNavigation.canScroll=d.width()>i.width();s.markNow(a);s.fillData(a,d,n);if(l.useCookie){var c=e.cookie(l.cookieKey+"ScrollPos");if(c){a.hPosition=c}}if(l.scrollToToday){s.navigateTo(a,"now");s.scrollPanel(a,0)}else{if(a.hPosition!==0){if(a.scaleOldWidth){r=d.width()-i.width();o=r*a.hPosition/a.scaleOldWidth;a.hPosition=o>0?0:o;a.scaleOldWidth=null}d.css({"margin-left":a.hPosition});a.scrollNavigation.panelMargin=a.hPosition}s.repositionLabel(a)}d.css({height:n.height()});s.waitToggle(a);l.onRender()},leftPanel:function(a){var t=e('<div class="leftPanel"/>').append(e('<div class="row spacer"/>').css("height",r.getCellSize()*a.headerRows).css("width","100%"));var n=[];e.each(a.data,(function(e,t){if(e>=a.pageNum*l.itemsPerPage&&e<a.pageNum*l.itemsPerPage+l.itemsPerPage){var i="id"in t?'" data-id="'+t.id:"";n.push('<div class="row name row'+e+(t.desc?"":" fn-wide "+i)+'" id="rowheader'+e+'" data-offset="'+e%l.itemsPerPage*r.getCellSize()+'">'+'<span class="fn-label'+(t.cssClass?" "+t.cssClass:"")+'">'+(t.name||"")+"</span>"+"</div>");if(t.desc){n.push('<div class="row desc row'+e+' " id="RowdId_'+e+i+'">'+'<span class="fn-label'+(t.cssClass?" "+t.cssClass:"")+'">'+t.desc+"</span>"+"</div>")}}}));return t.append(n.join(""))},dataPanel:function(t,n){var i=e('<div class="dataPanel" style="width: '+n+'px;"/>');var o="onwheel"in t?"wheel":document.onmousewheel!==a?"mousewheel":"DOMMouseScroll";e(t).on(o,(function(e){s.wheelScroll(t,e)}));i.click((function(a){a.stopPropagation();var n,i;var o=e(t).find(".fn-gantt .leftPanel");var d=e(t).find(".fn-gantt .dataPanel");switch(l.scale){case"months":i=r.getCellSize();break;case"hours":i=r.getCellSize()*4;break;case"days":i=r.getCellSize()*3;break;case"weeks":default:i=r.getCellSize()*2}var c=s.elementFromPoint(a.pageX,d.offset().top+i);if(c.className==="fn-label"){c=e(c.parentNode)}else{c=e(c)}var g=c.data("repdate");var f=s.elementFromPoint(o.offset().left+o.width()-10,a.pageY);if(f.className.indexOf("fn-label")===0){f=e(f.parentNode)}else{f=e(f)}var u=f.data("id");l.onAddClick(g,u)}));return i},rightPanel:function(a,t){var n=null;var i=["sn","wd","wd","wd","wd","wd","sa"];var d=[];var c=0;var g=[];var f=0;var u=[];var v=0;var h=[];var p=[];var m=new Date;m.setHours(0,0,0,0);var w=e('<div class="row header"></div>');var y,b;var D,k,S,P;var C,M;var z;switch(l.scale){case"hours":n=r.parseTimeRange(a.dateStart,a.dateEnd,a.scaleStep);D=n[0].getFullYear();k=n[0].getMonth();P=n[0];for(y=0,b=n.length;y<b;y++){C=n[y];var T=C.getFullYear();if(T!==D){d.push('<div class="row header year" style="width: '+r.getCellSize()*c+'px;"><div class="fn-label">'+D+"</div></div>");D=T;c=0}c++;var N=C.getMonth();if(N!==k){g.push('<div class="row header month" style="width: '+r.getCellSize()*f+'px"><div class="fn-label">'+l.months[k]+"</div></div>");k=N;f=0}f++;var x=C.getDay();var Y=P.getDay();if(x!==Y){M=m-P===0?"today":r.isHoliday(P.getTime())?"holiday":i[Y];u.push('<div class="row date '+M+'" '+'style="width: '+r.getCellSize()*v+'px;">'+'<div class="fn-label">'+P.getDate()+"</div></div>");h.push('<div class="row day '+M+'" '+'style="width: '+r.getCellSize()*v+'px;">'+'<div class="fn-label">'+l.dow[Y]+"</div></div>");P=C;v=0}v++;M=i[x];if(r.isHoliday(C)){M="holiday"}p.push('<div class="row day '+M+'" id="dh-'+C.getTime()+'" data-offset="'+y*r.getCellSize()+'" data-repdate="'+C.getRepDate(l.scale)+'"><div class="fn-label">'+C.getHours()+"</div></div>")}d.push('<div class="row header year" style="width: '+r.getCellSize()*c+'px;"><div class="fn-label">'+D+"</div></div>");g.push('<div class="row header month" style="width: '+r.getCellSize()*f+'px"><div class="fn-label">'+l.months[k]+"</div></div>");M=i[P.getDay()];if(r.isHoliday(P)){M="holiday"}u.push('<div class="row date '+M+'" '+'style="width: '+r.getCellSize()*v+'px;">'+'<div class="fn-label">'+P.getDate()+"</div></div>");h.push('<div class="row day '+M+'" '+'style="width: '+r.getCellSize()*v+'px;">'+'<div class="fn-label">'+l.dow[P.getDay()]+"</div></div>");z=s.dataPanel(a,n.length*r.getCellSize());z.append(w.clone().html(d.join("")),w.clone().html(g.join("")),w.clone().html(u.join("")),w.clone().html(h.join("")),w.clone().html(p.join("")));break;case"weeks":n=r.parseWeeksRange(a.dateStart,a.dateEnd);D=n[0].getFullYear();k=n[0].getMonth();S=n[0].getWeekOfYear();var F;for(y=0,b=n.length;y<b;y++){C=n[y];if(S>(S=C.getWeekOfYear())){F=C.getDate()-1;F-=!C.getMonth()?0:31;F/=7;d.push('<div class="row header year" style="width: '+r.getCellSize()*(c-F)+'px;"><div class="fn-label">'+D+"</div></div>");D++;c=F}c++;if(C.getMonth()!==k){F=C.getDate()-1;F/=7;g.push('<div class="row header month" style="width:'+r.getCellSize()*(f-F)+'px;"><div class="fn-label">'+l.months[k]+"</div></div>");k=C.getMonth();f=F}f++;u.push('<div class="row day wd"'+' id="'+C.getWeekId()+'" data-offset="'+y*r.getCellSize()+'" data-repdate="'+C.getRepDate(l.scale)+'">'+'<div class="fn-label">'+S+"</div></div>")}d.push('<div class="row header year" style="width: '+r.getCellSize()*c+'px;"><div class="fn-label">'+D+"</div></div>");g.push('<div class="row header month" style="width: '+r.getCellSize()*f+'px"><div class="fn-label">'+l.months[k]+"</div></div>");z=s.dataPanel(a,n.length*r.getCellSize());z.append(w.clone().html(d.join("")),w.clone().html(g.join("")),w.clone().html(u.join("")));break;case"months":n=r.parseMonthsRange(a.dateStart,a.dateEnd);D=n[0].getFullYear();k=n[0].getMonth();for(y=0,b=n.length;y<b;y++){C=n[y];if(C.getFullYear()!==D){d.push('<div class="row header year" style="width: '+r.getCellSize()*c+'px;"><div class="fn-label">'+D+"</div></div>");D=C.getFullYear();c=0}c++;g.push('<div class="row day wd" id="dh-'+r.genId(C)+'" data-offset="'+y*r.getCellSize()+'" data-repdate="'+C.getRepDate(l.scale)+'">'+(1+C.getMonth())+"</div>")}d.push('<div class="row header year" style="width: '+r.getCellSize()*c+'px;"><div class="fn-label">'+D+"</div></div>");g.push('<div class="row header month" style="width: '+r.getCellSize()*f+'px"><div class="fn-label">'+l.months[k]+"</div></div>");z=s.dataPanel(a,n.length*r.getCellSize());z.append(w.clone().html(d.join("")),w.clone().html(g.join("")),w.clone().html(u.join("")),w.clone().html(h.join("")));break;default:n=r.parseDateRange(a.dateStart,a.dateEnd);var O=o(n[0],-1);D=O.getFullYear();k=O.getMonth();for(y=0,b=n.length;y<b;y++){C=n[y];if(C.getFullYear()!==D){d.push('<div class="row header year" style="width:'+r.getCellSize()*c+'px;"><div class="fn-label">'+D+"</div></div>");D=C.getFullYear();c=0}c++;if(C.getMonth()!==k){g.push('<div class="row header month" style="width:'+r.getCellSize()*f+'px;"><div class="fn-label">'+l.months[k]+"</div></div>");k=C.getMonth();f=0}f++;P=C.getDay();M=i[P];if(r.isHoliday(C)){M="holiday"}u.push('<div class="row date '+M+'"'+' id="dh-'+r.genId(C)+'" data-offset="'+y*r.getCellSize()+'" data-repdate="'+C.getRepDate(l.scale)+'">'+'<div class="fn-label">'+C.getDate()+"</div></div>");h.push('<div class="row day '+M+'"'+' id="dw-'+r.genId(C)+'" data-repdate="'+C.getRepDate(l.scale)+'">'+'<div class="fn-label">'+l.dow[P]+"</div></div>")}d.push('<div class="row header year" style="width: '+r.getCellSize()*c+'px;"><div class="fn-label">'+D+"</div></div>");g.push('<div class="row header month" style="width: '+r.getCellSize()*f+'px"><div class="fn-label">'+l.months[k]+"</div></div>");z=s.dataPanel(a,n.length*r.getCellSize());z.append(w.clone().html(d.join("")),w.clone().html(g.join("")),w.clone().html(u.join("")),w.clone().html(h.join("")))}return e('<div class="rightPanel"></div>').append(z)},navigation:function(a){var t=null;if(l.navigate==="scroll"){t=e('<div class="navigate" />').append(e('<div class="nav-slider" />').append(e('<div class="nav-slider-left" />').append(e('<button type="button" class="nav-link nav-page-back"/>').html("&lt;").click((function(){s.navigatePage(a,-1)}))).append(e('<div class="page-number"/>').append(e("<span/>").html(a.pageNum+1+" / "+a.pageCount))).append(e('<button type="button" class="nav-link nav-page-next"/>').html("&gt;").click((function(){s.navigatePage(a,1)}))).append(e('<button type="button" class="nav-link nav-now"/>').html("&#9679;").click((function(){s.navigateTo(a,"now")}))).append(e('<button type="button" class="nav-link nav-prev-week"/>').html("&lt;&lt;").click((function(){if(l.scale==="hours"){s.navigateTo(a,r.getCellSize()*8)}else if(l.scale==="days"){s.navigateTo(a,r.getCellSize()*30)}else if(l.scale==="weeks"){s.navigateTo(a,r.getCellSize()*12)}else if(l.scale==="months"){s.navigateTo(a,r.getCellSize()*6)}}))).append(e('<button type="button" class="nav-link nav-prev-day"/>').html("&lt;").click((function(){if(l.scale==="hours"){s.navigateTo(a,r.getCellSize()*4)}else if(l.scale==="days"){s.navigateTo(a,r.getCellSize()*7)}else if(l.scale==="weeks"){s.navigateTo(a,r.getCellSize()*4)}else if(l.scale==="months"){s.navigateTo(a,r.getCellSize()*3)}})))).append(e('<div class="nav-slider-content" />').append(e('<div class="nav-slider-bar" />').append(e('<a class="nav-slider-button" />')).mousedown((function(e){e.preventDefault();a.scrollNavigation.scrollerMouseDown=true;s.sliderScroll(a,e)})).mousemove((function(e){if(a.scrollNavigation.scrollerMouseDown){s.sliderScroll(a,e)}})))).append(e('<div class="nav-slider-right" />').append(e('<button type="button" class="nav-link nav-next-day"/>').html("&gt;").click((function(){if(l.scale==="hours"){s.navigateTo(a,r.getCellSize()*-4)}else if(l.scale==="days"){s.navigateTo(a,r.getCellSize()*-7)}else if(l.scale==="weeks"){s.navigateTo(a,r.getCellSize()*-4)}else if(l.scale==="months"){s.navigateTo(a,r.getCellSize()*-3)}}))).append(e('<button type="button" class="nav-link nav-next-week"/>').html("&gt;&gt;").click((function(){if(l.scale==="hours"){s.navigateTo(a,r.getCellSize()*-8)}else if(l.scale==="days"){s.navigateTo(a,r.getCellSize()*-30)}else if(l.scale==="weeks"){s.navigateTo(a,r.getCellSize()*-12)}else if(l.scale==="months"){s.navigateTo(a,r.getCellSize()*-6)}}))).append(e('<button type="button" class="nav-link nav-zoomIn"/>').html("&#43;").click((function(){s.zoomInOut(a,-1)}))).append(e('<button type="button" class="nav-link nav-zoomOut"/>').html("&#45;").click((function(){s.zoomInOut(a,1)})))));e(document).mouseup((function(){a.scrollNavigation.scrollerMouseDown=false}))}else{t=e('<div class="navigate" />').append(e('<button type="button" class="nav-link nav-page-back"/>').html("&lt;").click((function(){s.navigatePage(a,-1)}))).append(e('<div class="page-number"/>').append(e("<span/>").html(a.pageNum+1+" / "+a.pageCount))).append(e('<button type="button" class="nav-link nav-page-next"/>').html("&gt;").click((function(){s.navigatePage(a,1)}))).append(e('<button type="button" class="nav-link nav-begin"/>').html("&#124;&lt;").click((function(){s.navigateTo(a,"begin")}))).append(e('<button type="button" class="nav-link nav-prev-week"/>').html("&lt;&lt;").click((function(){s.navigateTo(a,r.getCellSize()*7)}))).append(e('<button type="button" class="nav-link nav-prev-day"/>').html("&lt;").click((function(){s.navigateTo(a,r.getCellSize())}))).append(e('<button type="button" class="nav-link nav-now"/>').html("&#9679;").click((function(){s.navigateTo(a,"now")}))).append(e('<button type="button" class="nav-link nav-next-day"/>').html("&gt;").click((function(){s.navigateTo(a,r.getCellSize()*-1)}))).append(e('<button type="button" class="nav-link nav-next-week"/>').html("&gt;&gt;").click((function(){s.navigateTo(a,r.getCellSize()*-7)}))).append(e('<button type="button" class="nav-link nav-end"/>').html("&gt;&#124;").click((function(){s.navigateTo(a,"end")}))).append(e('<button type="button" class="nav-link nav-zoomIn"/>').html("&#43;").click((function(){s.zoomInOut(a,-1)}))).append(e('<button type="button" class="nav-link nav-zoomOut"/>').html("&#45;").click((function(){s.zoomInOut(a,1)})))}return e('<div class="bottom"></div>').append(t)},createProgressBar:function(a,t,n,i,s){t=t||"";var o=r.getCellSize();var d=r.getProgressBarMargin()||0;var c=e('<div class="bar"><div class="fn-label">'+t+"</div></div>").css({width:o*a-d+2}).data("dataObj",s);if(n){c.mouseenter((function(a){var t=e('<div class="fn-gantt-hint" />').html(n);e("body").append(t);t.css("left",a.pageX);t.css("top",a.pageY);t.show()})).mouseleave((function(){e(".fn-gantt-hint").remove()})).mousemove((function(a){e(".fn-gantt-hint").css("left",a.pageX);e(".fn-gantt-hint").css("top",a.pageY+15)}))}if(i){c.addClass(i)}c.click((function(a){a.stopPropagation();l.onItemClick(e(this).data("dataObj"))}));return c},markNow:function(a){var t=(new Date).setHours(0,0,0,0);switch(l.scale){case"weeks":e(a).find(':findweek("'+t+'")').removeClass("wd").addClass("today");break;case"months":e(a).find(':findmonth("'+t+'")').removeClass("wd").addClass("today");break;case"days":case"hours":default:e(a).find(':findday("'+t+'")').removeClass("wd").addClass("today")}},fillData:function(a,n,i){var o=function(e){try{e=e.replace("rgb(","").replace(")","");var a=e.split(",");var t=parseInt(a[0],10);var n=parseInt(a[1],10);var i=parseInt(a[2],10);var l=Math.round((255-(.299*t+.587*n+.114*i))*.9);return"rgb("+l+", "+l+", "+l+")"}catch(e){return""}};e.each(a.data,(function(i,d){if(i>=a.pageNum*l.itemsPerPage&&i<a.pageNum*l.itemsPerPage+l.itemsPerPage){e.each(d.values,(function(d,c){var g;var f,u,v,h,p,m,w;var y,b;switch(l.scale){case"hours":p=r.genId(r.dateDeserialize(c.from),a.scaleStep);f=e(a).find("#dh-"+p);m=r.genId(r.dateDeserialize(c.to),a.scaleStep);u=e(a).find("#dh-"+m);v=f.data("offset");h=u.data("offset");w=Math.floor((h-v)/r.getCellSize())+1;g=s.createProgressBar(w,c.label,c.desc,c.customClass,c.dataObj);y=e(a).find("#rowheader"+i);b=r.getCellSize()*5+2+y.data("offset");g.css({top:b,left:Math.floor(v)});n.append(g);break;case"weeks":p=r.dateDeserialize(c.from);m=r.dateDeserialize(c.to);f=e(a).find("#"+p.getWeekId());v=f.data("offset");u=e(a).find("#"+m.getWeekId());h=u.data("offset");w=Math.round((h-v)/r.getCellSize())+1;g=s.createProgressBar(w,c.label,c.desc,c.customClass,c.dataObj);y=e(a).find("#rowheader"+i);b=r.getCellSize()*3+2+y.data("offset");g.css({top:b,left:Math.floor(v)});n.append(g);break;case"months":p=r.dateDeserialize(c.from);m=r.dateDeserialize(c.to);if(p.getDate()<=3&&p.getMonth()===0){p.setDate(p.getDate()+4)}if(p.getDate()<=3&&p.getMonth()===0){p.setDate(p.getDate()+4)}if(m.getDate()<=3&&m.getMonth()===0){m.setDate(m.getDate()+4)}f=e(a).find("#dh-"+r.genId(p));v=f.data("offset");u=e(a).find("#dh-"+r.genId(m));h=u.data("offset");w=Math.round((h-v)/r.getCellSize())+1;g=s.createProgressBar(w,c.label,c.desc,c.customClass,c.dataObj);y=e(a).find("#rowheader"+i);b=r.getCellSize()*2+2+y.data("offset");g.css({top:b,left:Math.floor(v)});n.append(g);break;case"days":default:p=r.genId(r.dateDeserialize(c.from));m=r.genId(r.dateDeserialize(c.to));f=e(a).find("#dh-"+p);v=f.data("offset");w=Math.floor((m-p)/t)+1;g=s.createProgressBar(w,c.label,c.desc,c.customClass,c.dataObj);y=e(a).find("#rowheader"+i);b=r.getCellSize()*4+2+y.data("offset");g.css({top:b,left:Math.floor(v)});n.append(g)}var D=g.find(".fn-label");if(D&&g.length){var k=o(g[0].style.backgroundColor);D.css("color",k)}else if(D){D.css("color","")}}))}}))},navigateTo:function(a,t){var n=e(a).find(".fn-gantt .rightPanel");var i=n.find(".dataPanel");var l=n.width();var r=i.width();var o=function(){s.repositionLabel(a)};var d,c;switch(t){case"begin":i.animate({"margin-left":"0px"},"fast",o);a.scrollNavigation.panelMargin=0;break;case"end":var g=r-l;a.scrollNavigation.panelMargin=g*-1;i.animate({"margin-left":"-"+g},"fast",o);break;case"now":if(!a.scrollNavigation.canScroll||!i.find(".today").length){return false}d=(r-l)*-1;c=i.css("margin-left").replace("px","");t=i.find(".today").offset().left-i.offset().left;t*=-1;if(t>0){t=0}else if(t<d){t=d}i.animate({"margin-left":t},"fast",o);a.scrollNavigation.panelMargin=t;break;default:d=(r-l)*-1;c=i.css("margin-left").replace("px","");t=parseInt(c,10)+t;if(t<=0&&t>=d){i.animate({"margin-left":t},"fast",o)}a.scrollNavigation.panelMargin=t}s.synchronizeScroller(a)},navigatePage:function(a,t){if(a.pageNum+t>=0&&a.pageNum+t<Math.ceil(a.rowsNum/l.itemsPerPage)){s.waitToggle(a,(function(){a.pageNum+=t;a.hPosition=e(".fn-gantt .dataPanel").css("margin-left").replace("px","");a.scaleOldWidth=false;s.init(a)}))}},zoomInOut:function(a,t){s.waitToggle(a,(function(){var n=t<0;var r=a.scaleStep+t*3;r=r<=1?1:r===4?3:r;var o=l.scale;var d=a.headerRows;if(l.scale==="hours"&&r>=13){o="days";d=4;r=13}else if(l.scale==="days"&&n){o="hours";d=5;r=12}else if(l.scale==="days"&&!n){o="weeks";d=3;r=13}else if(l.scale==="weeks"&&!n){o="months";d=2;r=14}else if(l.scale==="weeks"&&n){o="days";d=4;r=13}else if(l.scale==="months"&&n){o="weeks";d=3;r=13}if(n&&e.inArray(o,i)<e.inArray(l.minScale,i)||!n&&e.inArray(o,i)>e.inArray(l.maxScale,i)){s.init(a);return}a.scaleStep=r;l.scale=o;a.headerRows=d;var c=e(a).find(".fn-gantt .rightPanel");var g=c.find(".dataPanel");a.hPosition=g.css("margin-left").replace("px","");a.scaleOldWidth=g.width()-c.width();if(l.useCookie){e.cookie(l.cookieKey+"CurrentScale",l.scale);e.cookie(l.cookieKey+"ScrollPos",null)}s.init(a)}))},mouseScroll:function(a,t){var n=e(a).find(".fn-gantt .dataPanel");n.css("cursor","move");var i=n.offset();var l=a.scrollNavigation.mouseX===null?t.pageX:a.scrollNavigation.mouseX;var r=t.pageX-l;a.scrollNavigation.mouseX=t.pageX;s.scrollPanel(a,r);clearTimeout(a.scrollNavigation.repositionDelay);a.scrollNavigation.repositionDelay=setTimeout(s.repositionLabel,50,a)},wheelScroll:function(e,a){a.preventDefault();var t="detail"in a?a.detail:"wheelDelta"in a.originalEvent?-1/120*a.originalEvent.wheelDelta:a.originalEvent.deltaY?a.originalEvent.deltaY/Math.abs(a.originalEvent.deltaY):a.originalEvent.detail;s.scrollPanel(e,-50*t);clearTimeout(e.scrollNavigation.repositionDelay);e.scrollNavigation.repositionDelay=setTimeout(s.repositionLabel,50,e)},sliderScroll:function(a,t){var n=e(a).find(".nav-slider-bar");var i=n.find(".nav-slider-button");var l=e(a).find(".fn-gantt .rightPanel");var r=l.find(".dataPanel");var o=n.offset();var d=n.width();var c=i.width();var g,f;if(t.pageX>=o.left&&t.pageX<=o.left+d){g=t.pageX-o.left;g=g-c/2;i.css("left",g);f=r.width()-l.width();var u=g*f/d*-1;if(u>=0){r.css("margin-left","0px");a.scrollNavigation.panelMargin=0}else if(g>=d-c*1){r.css("margin-left",f*-1);a.scrollNavigation.panelMargin=f*-1}else{r.css("margin-left",u);a.scrollNavigation.panelMargin=u}clearTimeout(a.scrollNavigation.repositionDelay);a.scrollNavigation.repositionDelay=setTimeout(s.repositionLabel,5,a)}},scrollPanel:function(a,t){if(!a.scrollNavigation.canScroll){return false}var n=parseInt(a.scrollNavigation.panelMargin,10)+t;if(n>0){a.scrollNavigation.panelMargin=0;e(a).find(".fn-gantt .dataPanel").css("margin-left",a.scrollNavigation.panelMargin)}else if(n<a.scrollNavigation.panelMaxPos*-1){a.scrollNavigation.panelMargin=a.scrollNavigation.panelMaxPos*-1;e(a).find(".fn-gantt .dataPanel").css("margin-left",a.scrollNavigation.panelMargin)}else{a.scrollNavigation.panelMargin=n;e(a).find(".fn-gantt .dataPanel").css("margin-left",a.scrollNavigation.panelMargin)}s.synchronizeScroller(a)},synchronizeScroller:function(a){if(l.navigate!=="scroll"){return}var t=e(a).find(".fn-gantt .rightPanel");var n=t.find(".dataPanel");var i=e(a).find(".nav-slider-bar");var s=i.find(".nav-slider-button");var r=i.width();var o=s.width();var d=n.width()-t.width();var c=n.css("margin-left")||0;if(c){c=c.replace("px","")}var g=c*r/d-s.width()*.25;g=g>0?0:g*-1>=r-o*.75?(r-o*1.25)*-1:g;s.css("left",g*-1)},repositionLabel:function(a){setTimeout((function(){var t;if(!a){t=e(".fn-gantt .rightPanel .dataPanel")}else{var n=e(a).find(".fn-gantt .rightPanel");t=n.find(".dataPanel")}if(l.useCookie){e.cookie(l.cookieKey+"ScrollPos",t.css("margin-left").replace("px",""))}}),500)},waitToggle:function(a,t){if(e.isFunction(t)){var n=e(a);var i=n.offset();var s=n.outerWidth();var r=n.outerHeight();if(!a.loader){a.loader=e('<div class="fn-gantt-loader">'+'<div class="fn-gantt-loader-spinner"><span>'+l.waitText+"</span></div></div>")}n.append(a.loader);setTimeout(t,500)}else if(a.loader){a.loader.detach()}}};var r={getMaxDate:function(a){var t=null;e.each(a.data,(function(a,n){e.each(n.values,(function(e,a){t=t<r.dateDeserialize(a.to)?r.dateDeserialize(a.to):t}))}));t=t||new Date;var n;switch(l.scale){case"hours":t.setHours(Math.ceil(t.getHours()/a.scaleStep)*a.scaleStep);t.setHours(t.getHours()+a.scaleStep*3);break;case"weeks":n=new Date(t.getTime());n=new Date(n.setDate(n.getDate()+3*7));var i=Math.floor(n.getDate()/7)*7;t=new Date(n.getFullYear(),n.getMonth(),i===0?4:i-3);break;case"months":n=new Date(t.getFullYear(),t.getMonth(),1);n.setMonth(n.getMonth()+2);t=new Date(n.getFullYear(),n.getMonth(),1);break;case"days":default:t.setHours(0);t.setDate(t.getDate()+3)}return t},getMinDate:function(a){var t=null;e.each(a.data,(function(a,n){e.each(n.values,(function(e,a){t=t>r.dateDeserialize(a.from)||t===null?r.dateDeserialize(a.from):t}))}));t=t||new Date;switch(l.scale){case"hours":t.setHours(Math.floor(t.getHours()/a.scaleStep)*a.scaleStep);t.setHours(t.getHours()-a.scaleStep*3);break;case"weeks":var n=new Date(t.getTime());n=new Date(n.setDate(n.getDate()-3*7));var i=Math.floor(n.getDate()/7)*7;t=new Date(n.getFullYear(),n.getMonth(),i===0?4:i-3);break;case"months":t.setHours(0,0,0,0);t.setDate(1);t.setMonth(t.getMonth()-3);break;case"days":default:t.setHours(0,0,0,0);t.setDate(t.getDate()-3)}return t},parseDateRange:function(e,a){var t=new Date(e.getTime());var n=[];var i=0;do{n[i++]=new Date(t.getTime());t.setDate(t.getDate()+1)}while(t<=a);return n},parseTimeRange:function(e,a,n){var i=new Date(e);var l=new Date(a);i.setHours(0,0,0,0);l.setMilliseconds(0);l.setSeconds(0);if(l.getMinutes()>0||l.getHours()>0){l.setMinutes(0);l.setHours(0);l.setTime(l.getTime()+t)}var s=[];var r=0;for(;;){var d=new Date(i);d.setHours(Math.floor(i.getHours()/n)*n);if(s[r]&&d.getDay()!==s[r].getDay()){d.setHours(0)}s[r]=d;if(i>a){break}i=o(d,n);r++}return s},parseWeeksRange:function(e,a){var t=e.getDayForWeek();var n=[];var i=0;do{n[i++]=t.getDayForWeek();t.setDate(t.getDate()+7)}while(t<=a);return n},parseMonthsRange:function(e,a){var t=new Date(e);var n=new Date(a);var i=[];var l=0;do{i[l++]=new Date(t.getFullYear(),t.getMonth(),1);t.setMonth(t.getMonth()+1)}while(t<=a);return i},dateDeserialize:function(a){if(typeof a==="string"){a=a.replace(/\/Date\((.*)\)\//,"$1");a=e.isNumeric(a)?parseInt(a,10):e.trim(a)}return new Date(a)},genId:function(a){if(e.isNumeric(a)){a=new Date(a)}switch(l.scale){case"hours":var t=a.getHours();if(arguments.length>=2){t=Math.floor(a.getHours()/arguments[1])*arguments[1]}return new Date(a.getFullYear(),a.getMonth(),a.getDate(),t).getTime();case"weeks":var n=a.getFullYear();var i=a.getWeekOfYear();var s=a.getMonth();if(s===11&&i===1){n++}else if(!s&&i>51){n--}return n+"-"+i;case"months":return a.getFullYear()+"-"+a.getMonth();case"days":default:return new Date(a.getFullYear(),a.getMonth(),a.getDate()).getTime()}},_datesToDays:function(e){var a={};for(var t=0,n=e.length,i;t<n;t++){i=r.dateDeserialize(e[t]);a[i.setHours(0,0,0,0)]=true}return a},isHoliday:function(){if(!l.holidays||!l.holidays.length){return function(){return false}}var a=false;return function(t){if(!a){a=r._datesToDays(l.holidays)}return!!a[e.isNumeric(t)?t:new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()]}}(),getCellSize:function(){if(typeof r._getCellSize==="undefined"){var a=e('<div style="display: none; position: absolute;" class="fn-gantt"><div class="row"></div></div>');e("body").append(a);r._getCellSize=a.find(".row").height();a.empty().remove()}return r._getCellSize},getPageHeight:function(e){return e.pageNum+1===e.pageCount?e.rowsOnLastPage*r.getCellSize():l.itemsPerPage*r.getCellSize()},getProgressBarMargin:function(){if(typeof r._getProgressBarMargin==="undefined"){var a=e('<div style="display: none; position: absolute;"><div class="fn-gantt"><div class="rightPanel"><div class="dataPanel"><div class="row day"><div class="bar"></div></div></div></div></div></div>');var t=a.find(".fn-gantt .rightPanel .day .bar");e("body").append(a);r._getProgressBarMargin=parseInt(t.css("margin-left").replace("px",""),10);r._getProgressBarMargin+=parseInt(t.css("margin-right").replace("px",""),10);a.empty().remove()}return r._getProgressBarMargin}};this.each((function(){this.data=null;this.pageNum=0;this.pageCount=0;this.rowsOnLastPage=0;this.rowsNum=0;this.hPosition=0;this.dateStart=null;this.dateEnd=null;this.scrollClicked=false;this.scaleOldWidth=null;this.headerRows=null;if(l.useCookie){var a=e.cookie(l.cookieKey+"CurrentScale");if(a){l.scale=a}else{e.cookie(l.cookieKey+"CurrentScale",l.scale)}}switch(l.scale){case"hours":this.headerRows=5;this.scaleStep=1;break;case"weeks":this.headerRows=3;this.scaleStep=13;break;case"months":this.headerRows=2;this.scaleStep=14;break;case"days":default:this.headerRows=4;this.scaleStep=13}this.scrollNavigation={panelMouseDown:false,scrollerMouseDown:false,mouseX:null,panelMargin:0,repositionDelay:0,panelMaxPos:0,canScroll:true};this.gantt=null;this.loader=null;s.create(this)}))}})(jQuery);