").addClass("splitElement vSplitBar").attr("unselectable", "on").html("|");
var secondBox = $("
").addClass("splitElement splitBox2");
var splitter= new Splitter(element,firstBox,secondBox,splitterBar);
splitter.perc=perc;
firstBox.append(first);
secondBox.append(second);
element.append(firstBox).append(secondBox).append(splitterBar);
where.append(element);
var w = where.innerWidth();
var fbw = w *perc/ 100 - splitterBar.width();
var realW=firstBox.get(0).scrollWidth;
fbw=fbw>realW?realW:fbw;
firstBox.width(fbw).css({left:0});
splitterBar.css({left:firstBox.width()});
secondBox.width(w -fbw-splitterBar.width() ).css({left:firstBox.width() + splitterBar.width()});
splitterBar.bind("mousedown.gdf", function(e) {
$.splittify.splitterBar = $(this);
//bind event for start resizing
//console.debug("start splitting");
var realW=firstBox.get(0).scrollWidth;
$("body").unselectable().bind("mousemove.gdf", function(e) {
//manage resizing
//console.debug(e.pageX - $.gridify.columInResize.offset().left)
var sb = $.splittify.splitterBar;
var pos = e.pageX - sb.parent().offset().left;
var w = sb.parent().width();
var fbw=firstBox;
if (pos > 10 && pos < realW) {
sb.css({left:pos});
firstBox.width(pos);
secondBox.css({left:pos + sb.width(),width:w - pos - sb.width()});
}
splitter.perc=(firstBox.width()/splitter.element.width())*100;
//bind mouse up on body to stop resizing
}).bind("mouseup.gdf", function() {
//console.debug("stop splitting");
$(this).unbind("mousemove.gdf").unbind("mouseup.gdf").clearUnselectable();
delete $.splittify.splitterBar;
});
});
// keep both side in synch when scroll
var stopScroll=false;
var fs=firstBox.add(secondBox);
fs.scroll(function(e) {
var el = $(this);
var top = el.scrollTop();
if (el.is(".splitBox1") && stopScroll!="splitBox2"){
stopScroll="splitBox1";
secondBox.scrollTop(top);
}else if (el.is(".splitBox2") && stopScroll!="splitBox1"){
stopScroll="splitBox2";
firstBox.scrollTop(top);
}
secondBox.find(".fixHead").css('top', top);
firstBox.find(".fixHead").css('top', top);
where.stopTime("reset").oneTime(100,"reset",function(){stopScroll="";})
});
function Splitter(element,firstBox, secondBox, splitterBar) {
this.element=element;
this.firstBox = firstBox;
this.secondBox = secondBox;
this.splitterBar = splitterBar;
this.perc=0;
this.resize=function(){
var thisInstance = this;
setTimeout(function(){
var totW = thisInstance.element.width();
var realW = thisInstance.firstBox.get(0).scrollWidth;
var newW = totW*thisInstance.perc/100;
newW = newW < realW ? newW : realW;
thisInstance.firstBox.css({width:newW});
thisInstance.splitterBar.css({left:newW});
thisInstance.secondBox.css({left:newW + thisInstance.splitterBar.width(),width:totW - newW - thisInstance.splitterBar.width()});
}, 1)
}
}
return splitter;
}
};
//<%------------------------------------------------------------------------ UTILITIES ---------------------------------------------------------------%>
function computeStart(start) {
return computeStartDate(start).getTime();
}
function computeStartDate(start) {
var d = new Date(start+3600000*12);
d.setHours(0, 0, 0, 0);
//move to next working day
while (isHoliday(d)) {
d.setDate(d.getDate() + 1);
}
d.setHours(0, 0, 0, 0);
return d;
}
function computeEnd(end) {
return computeEndDate(end).getTime()
}
function computeEndDate(end) {
var d = new Date(end-3600000*12);
d.setHours(23, 59, 59, 999);
//move to next working day
while (isHoliday(d)) {
d.setDate(d.getDate() + 1);
}
d.setHours(23, 59, 59, 999);
return d;
}
function computeEndByDuration(start, duration) {
var d = new Date(start);
//console.debug("computeEndByDuration start ",d,duration)
var q = duration - 1;
while (q > 0) {
d.setDate(d.getDate() + 1);
if (!isHoliday(d))
q--;
}
d.setHours(23, 59, 59, 999);
return d.getTime();
}
function incrementDateByWorkingDays(date, days) {
var d = new Date(date);
d.incrementDateByWorkingDays(days);
return d.getTime();
}
function recomputeDuration(start, end) {
//console.debug("recomputeDuration");
return new Date(start).distanceInWorkingDays(new Date(end));
}
//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license
if (!Array.prototype.filter){
Array.prototype.filter = function (fun) {
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var res = new Array();
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in this) {
var val = this[i]; // in case fun mutates this
if (fun.call(thisp, val, i, this))
res.push(val);
}
}
return res;
};
}