
var JSGantt; if (!JSGantt) JSGantt = {};
var vTimeout = 0;
var vBenchTime = new Date().getTime();
JSGantt.TaskItem = function(oneDayLabel, daysLabel, pID, pName, pStart, pEnd, pColor, pLink, pMile, pRes, pComp, pGroup, pParent, pOpen, pDepend, pCaption)
{
var oneDayLabel = oneDayLabel;
var daysLabel = daysLabel;
var vID    = pID;
var vName  = pName;
var vStart = new Date();
var vEnd   = new Date();
var vColor = pColor;
var vLink  = pLink;
var vMile  = pMile;
var vRes   = pRes;
var vComp  = pComp;
var vGroup = pGroup;
var vParent = pParent;
var vOpen   = pOpen;
var vDepend = pDepend;
var vCaption = pCaption;
var vDuration = '';
var vLevel = 0;
var vNumKid = 0;
var vVisible  = 1;
var x1, y1, x2, y2;
if (vGroup != 1)
{
vStart = JSGantt.parseDateStr(pStart,g.getDateInputFormat());
vEnd   = JSGantt.parseDateStr(pEnd,g.getDateInputFormat());
}
this.getID       = function(){ return vID };
this.getName     = function(){ return vName };
this.getStart    = function(){ return vStart};    this.getEnd      = function(){ return vEnd  };
this.getColor    = function(){ return vColor};
this.getLink     = function(){ return vLink };
this.getMile     = function(){ return vMile };
this.getDepend   = function(){ if(vDepend) return vDepend; else return null };
this.getCaption  = function(){ if(vCaption) return vCaption; else return ''; };
this.getResource = function(){ if(vRes) return vRes; else return '&nbsp';  };
this.getCompVal  = function(){ if(vComp) return vComp; else return 0; };
this.getCompStr  = function(){ if(vComp) return Math.round(vComp*100)/100 +'%'; else return ''; };
this.getDuration = function(vFormat){
if (vMile)
vDuration = '-';
else if (vFormat=='hour')
{
tmpPer =  Math.ceil((this.getEnd() - this.getStart()) /  ( 60 * 60 * 1000) );
if(tmpPer == 1)
vDuration = '1 Hour';
else
vDuration = tmpPer + ' Hours';
}
else if (vFormat=='minute')
{
tmpPer =  Math.ceil((this.getEnd() - this.getStart()) /  ( 60 * 1000) );
if(tmpPer == 1)
vDuration = '1 Minute';
else
vDuration = tmpPer + ' Minutes';
}
else { //if(vFormat == 'day') {
tmpPer =  Math.ceil((this.getEnd() - this.getStart()) /  (24 * 60 * 60 * 1000) + 1);
if(tmpPer == 1)  vDuration = oneDayLabel;
else             vDuration = tmpPer + ' ' + daysLabel;
}
return( vDuration )
};
this.getParent   = function(){ return vParent };
this.getGroup    = function(){ return vGroup };
this.getOpen     = function(){ return vOpen };
this.getLevel    = function(){ return vLevel };
this.getNumKids  = function(){ return vNumKid };
this.getStartX   = function(){ return x1 };
this.getStartY   = function(){ return y1 };
this.getEndX     = function(){ return x2 };
this.getEndY     = function(){ return y2 };
this.getVisible  = function(){ return vVisible };
this.setDepend   = function(pDepend){ vDepend = pDepend;};
this.setStart    = function(pStart){ vStart = pStart;};
this.setEnd      = function(pEnd)  { vEnd   = pEnd;  };
this.setLevel    = function(pLevel){ vLevel = pLevel;};
this.setNumKid   = function(pNumKid){ vNumKid = pNumKid;};
this.setCompVal  = function(pCompVal){ vComp = pCompVal;};
this.setStartX   = function(pX) {x1 = pX; };
this.setStartY   = function(pY) {y1 = pY; };
this.setEndX     = function(pX) {x2 = pX; };
this.setEndY     = function(pY) {y2 = pY; };
this.setOpen     = function(pOpen) {vOpen = pOpen; };
this.setVisible  = function(pVisible) {vVisible = pVisible; };
};
JSGantt.GanttChart =  function(pGanttVar, pDiv, pFormat )
{
var vGanttVar = pGanttVar;  var vDiv      = pDiv; var vFormat   = pFormat; var vShowRes  = 1; var vShowDur  = 1; var vShowComp = 1; var vShowStartDate = 1; var vShowEndDate = 1;var vDateInputFormat = "mm/dd/yyyy";var vDateDisplayFormat = "mm/dd/yy";
var vNumUnits  = 0;
var vCaptionType;
var vDepId = 1;
var vTaskList     = new Array();
var vFormatArr	= new Array("day","week","month","quarter");
var vQuarterArr   = new Array(1,1,1,2,2,2,3,3,3,4,4,4);
var vMonthDaysArr = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var vMonthArr = new Array( "January","February","March","April","May","June","July","August","September","October","November","December" );
var resource = 'Resource;'
var duration = 'Duration';
var comp = '% Comp.';
var startDate = 'Start Date';
var endDate = 'End Date';
var qtr = 'Qtr.';
var dayLabel = 'Day';
var weekLabel = 'Week';
var monthLabel = 'Month';
var quarterLabel = 'Quarter';
var labelFormat = 'Format';
var oneLabelDay = '1 day';
var labelDays = 'days';
this.setVMonthArr = function( vMonthArrLocal ){
vMonthArr = vMonthArrLocal;
};
this.setResource = function( resource ){
this.resource = resource;
};
this.getResource = function(){
return this.resource;
};
this.setDuration = function( duration ){
this.duration = duration;
};
this.setComp = function( comp ){
this.comp = comp;
};
this.setStartDate = function( startDate ){
this.startDate = startDate;
};
this.setEndDate = function( endDate ){
this.endDate = endDate;
};
this.setQtr = function( qtr ){
this.qtr = qtr;
};
this.setDayLabel = function( dayLabel ){
this.dayLabel= dayLabel;
};
this.setWeekLabel = function( weekLabel ){
this.weekLabel= weekLabel;
};
this.setMonthLabel = function( monthLabel ){
this.monthLabel = monthLabel;
};
this.setQtarterLabel = function( quarterLabel ){
this.quarterLabel = quarterLabel;
};
this.setLabelFormat = function( labelFormat ){
this.labelFormat = labelFormat;
};
this.setFormatArr = function() 	 {
vFormatArr = new Array();
for(var i = 0; i < arguments.length; i++) {vFormatArr[i] = arguments[i];}
if(vFormatArr.length>4){vFormatArr.length=4;}
}; this.setShowRes  = function(pShow) { vShowRes  = pShow; }; this.setShowDur  = function(pShow) { vShowDur  = pShow; }; this.setShowComp = function(pShow) { vShowComp = pShow; }; this.setShowStartDate = function(pShow) { vShowStartDate = pShow; }; this.setShowEndDate = function(pShow) { vShowEndDate = pShow; };      this.setDateInputFormat = function(pShow) { vDateInputFormat = pShow; };      this.setDateDisplayFormat = function(pShow) { vDateDisplayFormat = pShow; };  this.setCaptionType = function(pType) { vCaptionType = pType }; this.setFormat = function(pFormat){
vFormat = pFormat;
this.Draw();
};  this.getShowRes  = function(){ return vShowRes };  this.getShowDur  = function(){ return vShowDur };  this.getShowComp = function(){ return vShowComp };  this.getShowStartDate = function(){ return vShowStartDate };  this.getShowEndDate = function(){ return vShowEndDate };  this.getDateInputFormat = function() { return vDateInputFormat };  this.getDateDisplayFormat = function() { return vDateDisplayFormat };  this.getCaptionType = function() { return vCaptionType };  this.CalcTaskXY = function ()
{
var vList = this.getList();
var vTaskDiv;
var vParDiv;
var vLeft, vTop, vHeight, vWidth;
for(i = 0; i < vList.length; i++)
{
vID = vList[i].getID();
vTaskDiv = document.getElementById("taskbar_"+vID);
vBarDiv  = document.getElementById("bardiv_"+vID);
vParDiv  = document.getElementById("childgrid_"+vID);
if(vBarDiv) {
vList[i].setStartX( vBarDiv.offsetLeft );
vList[i].setStartY( vParDiv.offsetTop+vBarDiv.offsetTop+6 );
vList[i].setEndX( vBarDiv.offsetLeft + vBarDiv.offsetWidth );
vList[i].setEndY( vParDiv.offsetTop+vBarDiv.offsetTop+6 );
};
};
};
this.AddTaskItem = function(value)
{
vTaskList.push(value);
}; this.getList   = function() { return vTaskList };
this.clearDependencies = function()
{
var parent = document.getElementById('rightside');
var depLine;
var vMaxId = vDepId;
for ( i=1; i<vMaxId; i++ ) {
depLine = document.getElementById("line"+i);
if (depLine) { parent.removeChild(depLine); }
};
vDepId = 1;
};  this.sLine = function(x1,y1,x2,y2) {
vLeft = Math.min(x1,x2);
vTop  = Math.min(y1,y2);
vWid  = Math.abs(x2-x1) + 1;
vHgt  = Math.abs(y2-y1) + 1;
vDoc = document.getElementById('rightside');
var oDiv = document.createElement('div');
oDiv.id = "line"+vDepId++;
oDiv.style.position = "absolute";
oDiv.style.margin = "0px";
oDiv.style.padding = "0px";
oDiv.style.overflow = "hidden";
oDiv.style.border = "0px";
oDiv.style.zIndex = 0;
oDiv.style.backgroundColor = "red";
oDiv.style.left = vLeft + "px";
oDiv.style.top = vTop + "px";
oDiv.style.width = vWid + "px";
oDiv.style.height = vHgt + "px";
oDiv.style.visibility = "visible";
vDoc.appendChild(oDiv);
};
this.dLine = function(x1,y1,x2,y2) {
var dx = x2 - x1;
var dy = y2 - y1;
var x = x1;
var y = y1;
var n = Math.max(Math.abs(dx),Math.abs(dy));
dx = dx / n;
dy = dy / n;
for ( i = 0; i <= n; i++ )
{
vx = Math.round(x);
vy = Math.round(y);
this.sLine(vx,vy,vx,vy);
x += dx;
y += dy;
};
};
this.drawDependency =function(x1,y1,x2,y2)
{
if(x1 + 10 < x2)
{
this.sLine(x1,y1,x1+4,y1);
this.sLine(x1+4,y1,x1+4,y2);
this.sLine(x1+4,y2,x2,y2);
this.dLine(x2,y2,x2-3,y2-3);
this.dLine(x2,y2,x2-3,y2+3);
this.dLine(x2-1,y2,x2-3,y2-2);
this.dLine(x2-1,y2,x2-3,y2+2);
}
else
{
this.sLine(x1,y1,x1+4,y1);
this.sLine(x1+4,y1,x1+4,y2-10);
this.sLine(x1+4,y2-10,x2-8,y2-10);
this.sLine(x2-8,y2-10,x2-8,y2);
this.sLine(x2-8,y2,x2,y2);
this.dLine(x2,y2,x2-3,y2-3);
this.dLine(x2,y2,x2-3,y2+3);
this.dLine(x2-1,y2,x2-3,y2-2);
this.dLine(x2-1,y2,x2-3,y2+2);
}
};
this.DrawDependencies = function () {
this.CalcTaskXY();
this.clearDependencies();
var vList = this.getList();
for(var i = 0; i < vList.length; i++)
{
vDepend = vList[i].getDepend();
if(vDepend) {
var vDependStr = vDepend + '';
var vDepList = vDependStr.split(',');
var n = vDepList.length;
for(var k=0;k<n;k++) {
var vTask = this.getArrayLocationByID(vDepList[k]);
if(vList[vTask].getVisible()==1)
this.drawDependency(vList[vTask].getEndX(),vList[vTask].getEndY(),vList[i].getStartX()-1,vList[i].getStartY())
}
}
}
};
this.getArrayLocationByID = function(pId)  {
var vList = this.getList();
for(var i = 0; i < vList.length; i++)
{
if(vList[i].getID()==pId)
return i;
}
};
this.Draw = function()
{
var vMaxDate = new Date();
var vMinDate = new Date();
var vTmpDate = new Date();
var vNxtDate = new Date();
var vCurrDate = new Date();
var vTaskLeft = 0;
var vTaskRight = 0;
var vNumCols = 0;
var vID = 0;
var vMainTable = "";
var vLeftTable = "";
var vRightTable = "";
var vDateRowStr = "";
var vItemRowStr = "";
var vColWidth = 0;
var vColUnit = 0;
var vChartWidth = 0;
var vNumDays = 0;
var vDayWidth = 0;
var vStr = "";
var vNameWidth = 220;
var vStatusWidth = 70;
var vLeftWidth = 15 + 220 + 70 + 70 + 70 + 70 + 70;
if(vTaskList.length > 0)
{
JSGantt.processRows(vTaskList, 0, -1, 1, 1);
vMinDate = JSGantt.getMinDate(vTaskList, vFormat);
vMaxDate = JSGantt.getMaxDate(vTaskList, vFormat);
if(vFormat == 'day') {
vColWidth = 18;
vColUnit = 1;
}
else if(vFormat == 'week') {
vColWidth = 37;
vColUnit = 7;
}
else if(vFormat == 'month') {
vColWidth = 37;
vColUnit = 30;
}
else if(vFormat == 'quarter') {
vColWidth = 60;
vColUnit = 90;
}
else if(vFormat=='hour')
{
vColWidth = 18;
vColUnit = 1;
}
else if(vFormat=='minute')
{
vColWidth = 18;
vColUnit = 1;
}
vNumDays = (Date.parse(vMaxDate) - Date.parse(vMinDate)) / ( 24 * 60 * 60 * 1000);
vNumUnits = vNumDays / vColUnit;
vChartWidth = vNumUnits * vColWidth + 1;
vDayWidth = (vColWidth / vColUnit) + (1/vColUnit);
vMainTable =
'<TABLE id=theTable cellSpacing=0 cellPadding=0 border=0><TBODY><TR>' +
'<TD vAlign=top bgColor=#ffffff>';
if(vShowRes !=1) vNameWidth+=vStatusWidth;
if(vShowDur !=1) vNameWidth+=vStatusWidth;
if(vShowComp!=1) vNameWidth+=vStatusWidth;
if(vShowStartDate!=1) vNameWidth+=vStatusWidth;
if(vShowEndDate!=1) vNameWidth+=vStatusWidth;
vLeftTable =
'<DIV class=scroll id=leftside style="width:' + vLeftWidth + 'px"><TABLE cellSpacing=0 cellPadding=0 border=0><TBODY>' +
'<TR style="HEIGHT: 17px">' +
'  <TD style="WIDTH: 15px; HEIGHT: 17px"></TD>' +
'  <TD style="WIDTH: ' + vNameWidth + 'px; HEIGHT: 17px"><NOBR></NOBR></TD>';
if(vShowRes ==1) vLeftTable += '  <TD style="WIDTH: ' + vStatusWidth + 'px; HEIGHT: 17px"></TD>' ;
if(vShowDur ==1) vLeftTable += '  <TD style="WIDTH: ' + vStatusWidth + 'px; HEIGHT: 17px"></TD>' ;
if(vShowComp==1) vLeftTable += '  <TD style="WIDTH: ' + vStatusWidth + 'px; HEIGHT: 17px"></TD>' ;
if(vShowStartDate==1) vLeftTable += '  <TD style="WIDTH: ' + vStatusWidth + 'px; HEIGHT: 17px"></TD>' ;
if(vShowEndDate==1) vLeftTable += '  <TD style="WIDTH: ' + vStatusWidth + 'px; HEIGHT: 17px"></TD>' ;
vLeftTable +=
'<TR style="HEIGHT: 20px">' +
'  <TD style="BORDER-TOP: #efefef 1px solid; WIDTH: 15px; HEIGHT: 20px"></TD>' +
'  <TD style="BORDER-TOP: #efefef 1px solid; WIDTH: ' + vNameWidth + 'px; HEIGHT: 20px"><NOBR></NOBR></TD>' ;
if(vShowRes ==1) vLeftTable += '  <TD style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; WIDTH: 60px; HEIGHT: 20px" align=center nowrap>' + this.resource + '</TD>' ;
if(vShowDur ==1) vLeftTable += '  <TD style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; WIDTH: 60px; HEIGHT: 20px" align=center nowrap>' + this.duration + '</TD>' ;
if(vShowComp==1) vLeftTable += '  <TD style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; WIDTH: 60px; HEIGHT: 20px" align=center nowrap>' + this.comp + '</TD>' ;
if(vShowStartDate==1) vLeftTable += '  <TD style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; WIDTH: 60px; HEIGHT: 20px" align=center nowrap>' +  this.startDate + '</TD>' ;
if(vShowEndDate==1) vLeftTable += '  <TD style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; WIDTH: 60px; HEIGHT: 20px" align=center nowrap>' + this.endDate + '</TD>' ;
vLeftTable += '</TR>';
for(i = 0; i < vTaskList.length; i++)
{
if( vTaskList[i].getGroup()) {
vBGColor = "f3f3f3";
vRowType = "group";
} else {
vBGColor  = "ffffff";
vRowType  = "row";
}
vID = vTaskList[i].getID();
if(vTaskList[i].getVisible() == 0)
vLeftTable += '<TR id=child_' + vID + ' bgcolor=#' + vBGColor + ' style="display:none"  onMouseover=g.mouseOver(this,' + vID + ',"left","' + vRowType + '") onMouseout=g.mouseOut(this,' + vID + ',"left","' + vRowType + '")>' ;
else
vLeftTable += '<TR id=child_' + vID + ' bgcolor=#' + vBGColor + ' onMouseover=g.mouseOver(this,' + vID + ',"left","' + vRowType + '") onMouseout=g.mouseOut(this,' + vID + ',"left","' + vRowType + '")>' ;
vLeftTable +=
'  <TD class=gdatehead style="WIDTH: 15px; HEIGHT: 20px; BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;">&nbsp;</TD>' +
'  <TD class=gname style="WIDTH: ' + vNameWidth + 'px; HEIGHT: 20px; BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px;" nowrap><NOBR><span style="color: #aaaaaa">';
for(j=1; j<vTaskList[i].getLevel(); j++) {
vLeftTable += '&nbsp&nbsp&nbsp&nbsp';
}
vLeftTable += '</span>';
if( vTaskList[i].getGroup()) {
if( vTaskList[i].getOpen() == 1)
vLeftTable += '<SPAN id="group_' + vID + '" style="color:#000000; cursor:pointer; font-weight:bold; FONT-SIZE: 12px;" onclick="JSGantt.folder(' + vID + ','+vGanttVar+');'+vGanttVar+'.DrawDependencies();">&ndash;</span><span style="color:#000000">&nbsp</SPAN>' ;
else
vLeftTable += '<SPAN id="group_' + vID + '" style="color:#000000; cursor:pointer; font-weight:bold; FONT-SIZE: 12px;" onclick="JSGantt.folder(' + vID + ','+vGanttVar+');'+vGanttVar+'.DrawDependencies();">+</span><span style="color:#000000">&nbsp</SPAN>' ;
} else {
vLeftTable += '<span style="color: #000000; font-weight:bold; FONT-SIZE: 12px;">&nbsp&nbsp&nbsp</span>';
}
vLeftTable +=
'<span onclick=JSGantt.taskLink("' + vTaskList[i].getLink() + '",300,200); style="cursor:pointer"> ' + vTaskList[i].getName() + '</span></NOBR></TD>' ;
if(vShowRes ==1) vLeftTable += '  <TD class=gname style="WIDTH: 60px; HEIGHT: 20px; TEXT-ALIGN: center; BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><NOBR>' + vTaskList[i].getResource() + '</NOBR></TD>' ;
if(vShowDur ==1) vLeftTable += '  <TD class=gname style="WIDTH: 60px; HEIGHT: 20px; TEXT-ALIGN: center; BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><NOBR>' + vTaskList[i].getDuration(vFormat) + '</NOBR></TD>' ;
if(vShowComp==1) vLeftTable += '  <TD class=gname style="WIDTH: 60px; HEIGHT: 20px; TEXT-ALIGN: center; BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><NOBR>' + vTaskList[i].getCompStr()  + '</NOBR></TD>' ;
if(vShowStartDate==1) vLeftTable += '  <TD class=gname style="WIDTH: 60px; HEIGHT: 20px; TEXT-ALIGN: center; BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><NOBR>' + JSGantt.formatDateStr( vTaskList[i].getStart(), vDateDisplayFormat) + '</NOBR></TD>' ;
if(vShowEndDate==1) vLeftTable += '  <TD class=gname style="WIDTH: 60px; HEIGHT: 20px; TEXT-ALIGN: center; BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><NOBR>' + JSGantt.formatDateStr( vTaskList[i].getEnd(), vDateDisplayFormat) + '</NOBR></TD>' ;
vLeftTable += '</TR>';
}
vLeftTable += '</TD></TR>' +
'<TR><TD border=1 colspan=5 align=left style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 11px; BORDER-LEFT: #efefef 1px solid; height=18px">&nbsp;&nbsp;Powered by <a href=http://www.jsgantt.com>jsGantt</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + this.labelFormat + ':';
if (vFormatArr.join().indexOf("minute")!=-1) {
if (vFormat=='minute') vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" VALUE="minute" checked>Minute';
else                vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" onclick=JSGantt.changeFormat("minute",'+vGanttVar+'); VALUE="minute">Minute';
}
if (vFormatArr.join().indexOf("hour")!=-1) {
if (vFormat=='hour') vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" VALUE="hour" checked>Hour';
else                vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" onclick=JSGantt.changeFormat("hour",'+vGanttVar+'); VALUE="hour">Hour';
}
if (vFormatArr.join().indexOf("day")!=-1) {
if (vFormat=='day') vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" VALUE="day" checked>' + this.dayLabel;
else                vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" onclick=JSGantt.changeFormat("day",'+vGanttVar+'); VALUE="day">' + this.dayLabel;
}
if (vFormatArr.join().indexOf("week")!=-1) {
if (vFormat=='week') vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" VALUE="week" checked>' + this.weekLabel;
else                vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" onclick=JSGantt.changeFormat("week",'+vGanttVar+') VALUE="week">' + this.weekLabel;
}
if (vFormatArr.join().indexOf("month")!=-1) {
if (vFormat=='month') vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" VALUE="month" checked>' + this.monthLabel;
else                vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" onclick=JSGantt.changeFormat("month",'+vGanttVar+') VALUE="month">' + this.monthLabel;
}
if (vFormatArr.join().indexOf("quarter")!=-1) {
if (vFormat=='quarter') vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" VALUE="quarter" checked>' + this.quarterLabel;
else                vLeftTable += '<INPUT TYPE=RADIO NAME="radFormat" onclick=JSGantt.changeFormat("quarter",'+vGanttVar+') VALUE="quarter">' + this.quarterLabel;
}
vLeftTable += '</TD></TR></TBODY></TABLE></TD>';
vMainTable += vLeftTable;
vRightTable =
'<TD style="width: ' + vChartWidth + 'px;" vAlign=top bgColor=#ffffff>' +
'<DIV class=scroll2 id=rightside>' +
'<TABLE style="width: ' + vChartWidth + 'px;" cellSpacing=0 cellPadding=0 border=0>' +
'<TBODY><TR style="HEIGHT: 18px">';
vTmpDate.setFullYear(vMinDate.getFullYear(), vMinDate.getMonth(), vMinDate.getDate());
vTmpDate.setHours(0);
vTmpDate.setMinutes(0);
while(Date.parse(vTmpDate) <= Date.parse(vMaxDate))
{
vStr = vTmpDate.getFullYear() + '';
vStr = vStr.substring(2,4);
if(vFormat == 'minute')
{
vRightTable += '<td class=gdatehead style="FONT-SIZE: 12px; HEIGHT: 19px;" align=center colspan=60>' ;
vRightTable += JSGantt.formatDateStr(vTmpDate, vDateDisplayFormat) + ' ' + vTmpDate.getHours() + ':00 -' + vTmpDate.getHours() + ':59 </td>';
vTmpDate.setHours(vTmpDate.getHours()+1);
}
if(vFormat == 'hour')
{
vRightTable += '<td class=gdatehead style="FONT-SIZE: 12px; HEIGHT: 19px;" align=center colspan=24>' ;
vRightTable += JSGantt.formatDateStr(vTmpDate, vDateDisplayFormat) + '</td>';
vTmpDate.setDate(vTmpDate.getDate()+1);
}
if(vFormat == 'day')
{
vRightTable += '<td class=gdatehead style="FONT-SIZE: 12px; HEIGHT: 19px;" align=center colspan=7>' +
JSGantt.formatDateStr(vTmpDate,vDateDisplayFormat) + ' - ';
vTmpDate.setDate(vTmpDate.getDate()+6);
vRightTable += JSGantt.formatDateStr(vTmpDate, vDateDisplayFormat) + '</td>';
vTmpDate.setDate(vTmpDate.getDate()+1);
}
else if(vFormat == 'week')
{
vRightTable += '<td class=gdatehead align=center style="FONT-SIZE: 12px; HEIGHT: 19px;" width='+vColWidth+'px>`'+ vStr + '</td>';
vTmpDate.setDate(vTmpDate.getDate()+7);
}
else if(vFormat == 'month')
{
vRightTable += '<td class=gdatehead align=center style="FONT-SIZE: 12px; HEIGHT: 19px;" width='+vColWidth+'px>`'+ vStr + '</td>';
vTmpDate.setDate(vTmpDate.getDate() + 1);
while(vTmpDate.getDate() > 1)
{
vTmpDate.setDate(vTmpDate.getDate() + 1);
}
}
else if(vFormat == 'quarter')
{
vRightTable += '<td class=gdatehead align=center style="FONT-SIZE: 12px; HEIGHT: 19px;" width='+vColWidth+'px>`'+ vStr + '</td>';
vTmpDate.setDate(vTmpDate.getDate() + 81);
while(vTmpDate.getDate() > 1)
{
vTmpDate.setDate(vTmpDate.getDate() + 1);
}
}
}
vRightTable += '</TR><TR>';
vTmpDate.setFullYear(vMinDate.getFullYear(), vMinDate.getMonth(), vMinDate.getDate());
vNxtDate.setFullYear(vMinDate.getFullYear(), vMinDate.getMonth(), vMinDate.getDate());
vNumCols = 0;
while(Date.parse(vTmpDate) <= Date.parse(vMaxDate))
{
if (vFormat == 'minute')
{
if( vTmpDate.getMinutes() ==0 )
vWeekdayColor = "ccccff";
else
vWeekdayColor = "ffffff";
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid;"  bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">' + vTmpDate.getMinutes() + '</div></td>';
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; cursor: default;"  bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
vTmpDate.setMinutes(vTmpDate.getMinutes() + 1);
}
else if (vFormat == 'hour')
{
if(  vTmpDate.getHours() ==0  )
vWeekdayColor = "ccccff";
else
vWeekdayColor = "ffffff";
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid;"  bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">' + vTmpDate.getHours() + '</div></td>';
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; cursor: default;"  bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
vTmpDate.setHours(vTmpDate.getHours() + 1);
}
else if(vFormat == 'day' )
{
if( JSGantt.formatDateStr(vCurrDate,'mm/dd/yyyy') == JSGantt.formatDateStr(vTmpDate,'mm/dd/yyyy')) {
vWeekdayColor  = "ccccff";
vWeekendColor  = "9999ff";
vWeekdayGColor  = "bbbbff";
vWeekendGColor = "8888ff";
} else {
vWeekdayColor = "ffffff";
vWeekendColor = "cfcfcf";
vWeekdayGColor = "f3f3f3";
vWeekendGColor = "c3c3c3";
}
if(vTmpDate.getDay() % 6 == 0) {
vDateRowStr  += '<td class="gheadwkend" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid;" bgcolor=#' + vWeekendColor + ' align=center><div style="width: '+vColWidth+'px">' + vTmpDate.getDate() + '</div></td>';
vItemRowStr  += '<td class="gheadwkend" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; cursor: default;"  bgcolor=#' + vWeekendColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp</div></td>';
}
else {
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid;"  bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">' + vTmpDate.getDate() + '</div></td>';
if( JSGantt.formatDateStr(vCurrDate,'mm/dd/yyyy') == JSGantt.formatDateStr(vTmpDate,'mm/dd/yyyy'))
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; cursor: default;"  bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
else
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; cursor: default;"  align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
}
vTmpDate.setDate(vTmpDate.getDate() + 1);
}
else if(vFormat == 'week')
{
vNxtDate.setDate(vNxtDate.getDate() + 7);
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vWeekdayColor = "ccccff";
else
vWeekdayColor = "ffffff";
if(vNxtDate <= vMaxDate) {
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center width:'+vColWidth+'px><div style="width: '+vColWidth+'px">' + (vTmpDate.getMonth()+1) + '/' + vTmpDate.getDate() + '</div></td>';
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
else
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
} else {
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid; bgcolor=#' + vWeekdayColor + ' BORDER-RIGHT: #efefef 1px solid;" align=center width:'+vColWidth+'px><div style="width: '+vColWidth+'px">' + (vTmpDate.getMonth()+1) + '/' + vTmpDate.getDate() + '</div></td>';
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
else
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
}
vTmpDate.setDate(vTmpDate.getDate() + 7);
}
else if(vFormat == 'month')
{
vNxtDate.setFullYear(vTmpDate.getFullYear(), vTmpDate.getMonth(), vMonthDaysArr[vTmpDate.getMonth()]);
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vWeekdayColor = "ccccff";
else
vWeekdayColor = "ffffff";
if(vNxtDate <= vMaxDate) {
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center width:'+vColWidth+'px><div style="width: '+vColWidth+'px">' + vMonthArr[vTmpDate.getMonth()].substr(0,3) + '</div></td>';
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
else
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
} else {
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center width:'+vColWidth+'px><div style="width: '+vColWidth+'px">' + vMonthArr[vTmpDate.getMonth()].substr(0,3) + '</div></td>';
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
else
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
}
vTmpDate.setDate(vTmpDate.getDate() + 1);
while(vTmpDate.getDate() > 1)
{
vTmpDate.setDate(vTmpDate.getDate() + 1);
}
}
else if(vFormat == 'quarter')
{
vNxtDate.setDate(vNxtDate.getDate() + 122);
if( vTmpDate.getMonth()==0 || vTmpDate.getMonth()==1 || vTmpDate.getMonth()==2 )
vNxtDate.setFullYear(vTmpDate.getFullYear(), 2, 31);
else if( vTmpDate.getMonth()==3 || vTmpDate.getMonth()==4 || vTmpDate.getMonth()==5 )
vNxtDate.setFullYear(vTmpDate.getFullYear(), 5, 30);
else if( vTmpDate.getMonth()==6 || vTmpDate.getMonth()==7 || vTmpDate.getMonth()==8 )
vNxtDate.setFullYear(vTmpDate.getFullYear(), 8, 30);
else if( vTmpDate.getMonth()==9 || vTmpDate.getMonth()==10 || vTmpDate.getMonth()==11 )
vNxtDate.setFullYear(vTmpDate.getFullYear(), 11, 31);
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vWeekdayColor = "ccccff";
else
vWeekdayColor = "ffffff";
if(vNxtDate <= vMaxDate) {
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center width:'+vColWidth+'px><div style="width: '+vColWidth+'px">' + this.qtr + vQuarterArr[vTmpDate.getMonth()] + '</div></td>';
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
else
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid;" align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
} else {
vDateRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; HEIGHT: 19px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center width:'+vColWidth+'px><div style="width: '+vColWidth+'px">Qtr. ' + vQuarterArr[vTmpDate.getMonth()] + '</div></td>';
if( vCurrDate >= vTmpDate && vCurrDate < vNxtDate )
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" bgcolor=#' + vWeekdayColor + ' align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
else
vItemRowStr += '<td class="ghead" style="BORDER-TOP: #efefef 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #efefef 1px solid; BORDER-RIGHT: #efefef 1px solid;" align=center><div style="width: '+vColWidth+'px">&nbsp&nbsp</div></td>';
}
vTmpDate.setDate(vTmpDate.getDate() + 81);
while(vTmpDate.getDate() > 1)
{
vTmpDate.setDate(vTmpDate.getDate() + 1);
}
}
}
vRightTable += vDateRowStr + '</TR>';
vRightTable += '</TBODY></TABLE>';
for(i = 0; i < vTaskList.length; i++)
{
vTmpDate.setFullYear(vMinDate.getFullYear(), vMinDate.getMonth(), vMinDate.getDate());
vTaskStart = vTaskList[i].getStart();
vTaskEnd   = vTaskList[i].getEnd();
vNumCols = 0;
vID = vTaskList[i].getID();
vNumUnits = (vTaskList[i].getEnd() - vTaskList[i].getStart()) / (24 * 60 * 60 * 1000) + 1;
if (vFormat=='hour')
{
vNumUnits = (vTaskList[i].getEnd() - vTaskList[i].getStart()) / (  60 * 1000) + 1;
}
else if (vFormat=='minute')
{
vNumUnits = (vTaskList[i].getEnd() - vTaskList[i].getStart()) / (  60 * 1000) + 1;
}
if(vTaskList[i].getVisible() == 0)
vRightTable += '<DIV id=childgrid_' + vID + ' style="position:relative; display:none;">';
else
vRightTable += '<DIV id=childgrid_' + vID + ' style="position:relative">';
if( vTaskList[i].getMile()) {
vRightTable += '<DIV><TABLE style="position:relative; top:0px; width: ' + vChartWidth + 'px;" cellSpacing=0 cellPadding=0 border=0>' +
'<TR id=childrow_' + vID + ' class=yesdisplay style="HEIGHT: 20px" onMouseover=g.mouseOver(this,' + vID + ',"right","mile") onMouseout=g.mouseOut(this,' + vID + ',"right","mile")>' + vItemRowStr + '</TR></TABLE></DIV>';
vDateRowStr = JSGantt.formatDateStr(vTaskStart,vDateDisplayFormat);
vTaskLeft = (Date.parse(vTaskList[i].getStart()) - Date.parse(vMinDate)) / (24 * 60 * 60 * 1000);
vTaskRight = 1;
vRightTable +=
'<div id=bardiv_' + vID + ' style="position:absolute; top:0px; left:' + Math.ceil((vTaskLeft * (vDayWidth) + 1)) + 'px; height: 18px; width:160px; overflow:hidden;">' +
'  <div id=taskbar_' + vID + ' title="' + vTaskList[i].getName() + ': ' + vDateRowStr + '" style="height: 16px; width:12px; overflow:hidden; cursor: pointer;" onclick=JSGantt.taskLink("' + vTaskList[i].getLink() + '",300,200);>';
if(vTaskList[i].getCompVal() < 100)
{vRightTable += '&loz;</div>' ;}
else
{ vRightTable += '&diams;</div>' ;}
if( g.getCaptionType() ) {
vCaptionStr = '';
switch( g.getCaptionType() ) {
case 'Caption':    vCaptionStr = vTaskList[i].getCaption();  break;
case 'Resource':   vCaptionStr = vTaskList[i].getResource();  break;
case 'Duration':   vCaptionStr = vTaskList[i].getDuration(vFormat);  break;
case 'Complete':   vCaptionStr = vTaskList[i].getCompStr();  break;
}
vRightTable += '<div style="FONT-SIZE:12px; position:absolute; top:2px; width:120px; left:12px">' + vCaptionStr + '</div>';
};
vRightTable += '</div>';
} else {
vDateRowStr = JSGantt.formatDateStr(vTaskStart,vDateDisplayFormat) + ' - ' + JSGantt.formatDateStr(vTaskEnd,vDateDisplayFormat);
if (vFormat=='minute')
{
vTaskRight = (Date.parse(vTaskList[i].getEnd()) - Date.parse(vTaskList[i].getStart())) / ( 60 * 1000) + 1/vColUnit;
vTaskLeft = Math.ceil((Date.parse(vTaskList[i].getStart()) - Date.parse(vMinDate)) / ( 60 * 1000));
}
else if (vFormat=='hour')
{
vTaskRight = (Date.parse(vTaskList[i].getEnd()) - Date.parse(vTaskList[i].getStart())) / ( 60 * 60 * 1000) + 1/vColUnit;
vTaskLeft = (Date.parse(vTaskList[i].getStart()) - Date.parse(vMinDate)) / ( 60 * 60 * 1000);
}
else
{
vTaskRight = (Date.parse(vTaskList[i].getEnd()) - Date.parse(vTaskList[i].getStart())) / (24 * 60 * 60 * 1000) + 1/vColUnit;
vTaskLeft = Math.ceil((Date.parse(vTaskList[i].getStart()) - Date.parse(vMinDate)) / (24 * 60 * 60 * 1000));
if (vFormat='day')
{
var tTime=new Date();
tTime.setTime(Date.parse(vTaskList[i].getStart()));
if (tTime.getMinutes() > 29)
vTaskLeft+=.5;
}
}
if( vTaskList[i].getGroup()) {
vRightTable += '<DIV><TABLE style="position:relative; top:0px; width: ' + vChartWidth + 'px;" cellSpacing=0 cellPadding=0 border=0>' +
'<TR id=childrow_' + vID + ' class=yesdisplay style="HEIGHT: 20px" bgColor=#f3f3f3 onMouseover=g.mouseOver(this,' + vID + ',"right","group") onMouseout=g.mouseOut(this,' + vID + ',"right","group")>' + vItemRowStr + '</TR></TABLE></DIV>';
vRightTable +=
'<div id=bardiv_' + vID + ' style="position:absolute; top:5px; left:' + Math.ceil(vTaskLeft * (vDayWidth) + 1) + 'px; height: 7px; width:' + Math.ceil((vTaskRight) * (vDayWidth) - 1) + 'px">' +
'<div id=taskbar_' + vID + ' title="' + vTaskList[i].getName() + ': ' + vDateRowStr + '" class=gtask style="background-color:#000000; height: 7px; width:' + Math.ceil((vTaskRight) * (vDayWidth) -1) + 'px;  cursor: pointer;opacity:0.9;">' +
'<div style="Z-INDEX: -4; float:left; background-color:#666666; height:3px; overflow: hidden; margin-top:1px; ' +
'margin-left:1px; margin-right:1px; filter: alpha(opacity=80); opacity:0.8; width:' + vTaskList[i].getCompStr() + '; ' +
'cursor: pointer;" onclick=JSGantt.taskLink("' + vTaskList[i].getLink() + '",300,200);>' +
'</div>' +
'</div>' +
'<div style="Z-INDEX: -4; float:left; background-color:#000000; height:4px; overflow: hidden; width:1px;"></div>' +
'<div style="Z-INDEX: -4; float:right; background-color:#000000; height:4px; overflow: hidden; width:1px;"></div>' +
'<div style="Z-INDEX: -4; float:left; background-color:#000000; height:3px; overflow: hidden; width:1px;"></div>' +
'<div style="Z-INDEX: -4; float:right; background-color:#000000; height:3px; overflow: hidden; width:1px;"></div>' +
'<div style="Z-INDEX: -4; float:left; background-color:#000000; height:2px; overflow: hidden; width:1px;"></div>' +
'<div style="Z-INDEX: -4; float:right; background-color:#000000; height:2px; overflow: hidden; width:1px;"></div>' +
'<div style="Z-INDEX: -4; float:left; background-color:#000000; height:1px; overflow: hidden; width:1px;"></div>' +
'<div style="Z-INDEX: -4; float:right; background-color:#000000; height:1px; overflow: hidden; width:1px;"></div>' ;
if( g.getCaptionType() ) {
vCaptionStr = '';
switch( g.getCaptionType() ) {
case 'Caption':    vCaptionStr = vTaskList[i].getCaption();  break;
case 'Resource':   vCaptionStr = vTaskList[i].getResource();  break;
case 'Duration':   vCaptionStr = vTaskList[i].getDuration(vFormat);  break;
case 'Complete':   vCaptionStr = vTaskList[i].getCompStr();  break;
}
vRightTable += '<div style="FONT-SIZE:12px; position:absolute; top:-3px; width:120px; left:' + (Math.ceil((vTaskRight) * (vDayWidth) - 1) + 6) + 'px">' + vCaptionStr + '</div>';
};
vRightTable += '</div>' ;
} else {
vDivStr = '<DIV><TABLE style="position:relative; top:0px; width: ' + vChartWidth + 'px;" cellSpacing=0 cellPadding=0 border=0>' +
'<TR id=childrow_' + vID + ' class=yesdisplay style="HEIGHT: 20px" bgColor=#ffffff onMouseover=g.mouseOver(this,' + vID + ',"right","row") onMouseout=g.mouseOut(this,' + vID + ',"right","row")>' + vItemRowStr + '</TR></TABLE></DIV>';
vRightTable += vDivStr;
vRightTable +=
'<div id=bardiv_' + vID + ' style="position:absolute; top:4px; left:' + Math.ceil(vTaskLeft * (vDayWidth) + 1) + 'px; height:18px; width:' + Math.ceil((vTaskRight) * (vDayWidth) - 1) + 'px">' +
'<div id=taskbar_' + vID + ' title="' + vTaskList[i].getName() + ': ' + vDateRowStr + '" class=gtask style="background-color:#' + vTaskList[i].getColor() +'; height: 13px; width:' + Math.ceil((vTaskRight) * (vDayWidth) - 1) + 'px; cursor: pointer;opacity:0.9;" ' +
'onclick=JSGantt.taskLink("' + vTaskList[i].getLink() + '",300,200); >' +
'<div class=gcomplete style="Z-INDEX: -4; float:left; background-color:black; height:5px; overflow: auto; margin-top:4px; filter: alpha(opacity=40); opacity:0.4; width:' + vTaskList[i].getCompStr() + '; overflow:hidden">' +
'</div>' +
'</div>';
if( g.getCaptionType() ) {
vCaptionStr = '';
switch( g.getCaptionType() ) {
case 'Caption':    vCaptionStr = vTaskList[i].getCaption();  break;
case 'Resource':   vCaptionStr = vTaskList[i].getResource();  break;
case 'Duration':   vCaptionStr = vTaskList[i].getDuration(vFormat);  break;
case 'Complete':   vCaptionStr = vTaskList[i].getCompStr();  break;
}
vRightTable += '<div style="FONT-SIZE:12px; position:absolute; top:-3px; width:120px; left:' + (Math.ceil((vTaskRight) * (vDayWidth) - 1) + 6) + 'px">' + vCaptionStr + '</div>';
}
vRightTable += '</div>' ;
}
}
vRightTable += '</DIV>';
}
vMainTable += vRightTable + '</DIV></TD></TR></TBODY></TABLE></BODY></HTML>';
vDiv.innerHTML = vMainTable;
}
}; //this.draw
this.mouseOver = function( pObj, pID, pPos, pType ) {
if( pPos == 'right' )  vID = 'child_' + pID;
else vID = 'childrow_' + pID;
pObj.bgColor = "#ffffaa";
vRowObj = JSGantt.findObj(vID);
if (vRowObj) vRowObj.bgColor = "#ffffaa";
};
this.mouseOut = function( pObj, pID, pPos, pType ) {
if( pPos == 'right' )  vID = 'child_' + pID;
else vID = 'childrow_' + pID;
pObj.bgColor = "#ffffff";
vRowObj = JSGantt.findObj(vID);
if (vRowObj) {
if( pType == "group") {
pObj.bgColor = "#f3f3f3";
vRowObj.bgColor = "#f3f3f3";
} else {
pObj.bgColor = "#ffffff";
vRowObj.bgColor = "#ffffff";
}
}
};
}; //GanttChart
JSGantt.isIE = function () {
if(typeof document.all != 'undefined')
{return true;}
else
{return false;}
};
JSGantt.processRows = function(pList, pID, pRow, pLevel, pOpen)
{
var vMinDate = new Date();
var vMaxDate = new Date();
var vMinSet  = 0;
var vMaxSet  = 0;
var vList    = pList;
var vLevel   = pLevel;
var i        = 0;
var vNumKid  = 0;
var vCompSum = 0;
var vVisible = pOpen;
for(i = 0; i < pList.length; i++)
{
if(pList[i].getParent() == pID) {
vVisible = pOpen;
pList[i].setVisible(vVisible);
if(vVisible==1 && pList[i].getOpen() == 0)
{vVisible = 0;}
pList[i].setLevel(vLevel);
vNumKid++;
if(pList[i].getGroup() == 1) {
JSGantt.processRows(vList, pList[i].getID(), i, vLevel+1, vVisible);
};
if( vMinSet==0 || pList[i].getStart() < vMinDate) {
vMinDate = pList[i].getStart();
vMinSet = 1;
};
if( vMaxSet==0 || pList[i].getEnd() > vMaxDate) {
vMaxDate = pList[i].getEnd();
vMaxSet = 1;
};
vCompSum += pList[i].getCompVal();
}
}
if(pRow >= 0) {
pList[pRow].setStart(vMinDate);
pList[pRow].setEnd(vMaxDate);
pList[pRow].setNumKid(vNumKid);
pList[pRow].setCompVal(Math.ceil(vCompSum/vNumKid));
}
};
JSGantt.getMinDate = function getMinDate(pList, pFormat)
{
var vDate = new Date();
vDate.setFullYear(pList[0].getStart().getFullYear(), pList[0].getStart().getMonth(), pList[0].getStart().getDate());
for(i = 0; i < pList.length; i++)
{
if(Date.parse(pList[i].getStart()) < Date.parse(vDate))
vDate.setFullYear(pList[i].getStart().getFullYear(), pList[i].getStart().getMonth(), pList[i].getStart().getDate());
}
if ( pFormat== 'minute')
{
vDate.setHours(0);
vDate.setMinutes(0);
}
else if (pFormat == 'hour' )
{
vDate.setHours(0);
vDate.setMinutes(0);
}
else if (pFormat=='day')
{
vDate.setDate(vDate.getDate() - 1);
while(vDate.getDay() % 7 > 0)
{
vDate.setDate(vDate.getDate() - 1);
}
}
else if (pFormat=='week')
{
vDate.setDate(vDate.getDate() - 7);
while(vDate.getDay() % 7 > 0)
{
vDate.setDate(vDate.getDate() - 1);
}
}
else if (pFormat=='month')
{
while(vDate.getDate() > 1)
{
vDate.setDate(vDate.getDate() - 1);
}
}
else if (pFormat=='quarter')
{
if( vDate.getMonth()==0 || vDate.getMonth()==1 || vDate.getMonth()==2 )
{vDate.setFullYear(vDate.getFullYear(), 0, 1);}
else if( vDate.getMonth()==3 || vDate.getMonth()==4 || vDate.getMonth()==5 )
{vDate.setFullYear(vDate.getFullYear(), 3, 1);}
else if( vDate.getMonth()==6 || vDate.getMonth()==7 || vDate.getMonth()==8 )
{vDate.setFullYear(vDate.getFullYear(), 6, 1);}
else if( vDate.getMonth()==9 || vDate.getMonth()==10 || vDate.getMonth()==11 )
{vDate.setFullYear(vDate.getFullYear(), 9, 1);}
};
return(vDate);
};
JSGantt.getMaxDate = function (pList, pFormat)
{
var vDate = new Date();
vDate.setFullYear(pList[0].getEnd().getFullYear(), pList[0].getEnd().getMonth(), pList[0].getEnd().getDate());
for(i = 0; i < pList.length; i++)
{
if(Date.parse(pList[i].getEnd()) > Date.parse(vDate))
{
vDate.setTime(Date.parse(pList[i].getEnd()));
}
}
if (pFormat == 'minute')
{
vDate.setHours(vDate.getHours() + 1);
vDate.setMinutes(59);
}
if (pFormat == 'hour')
{
vDate.setHours(vDate.getHours() + 2);
}
if (pFormat=='day')
{
vDate.setDate(vDate.getDate() + 1);
while(vDate.getDay() % 6 > 0)
{
vDate.setDate(vDate.getDate() + 1);
}
}
if (pFormat=='week')
{
vDate.setDate(vDate.getDate() + 11);
while(vDate.getDay() % 6 > 0)
{
vDate.setDate(vDate.getDate() + 1);
}
}
if (pFormat=='month')
{
while(vDate.getDay() > 1)
{
vDate.setDate(vDate.getDate() + 1);
}
vDate.setDate(vDate.getDate() - 1);
}
if (pFormat=='quarter')
{
if( vDate.getMonth()==0 || vDate.getMonth()==1 || vDate.getMonth()==2 )
vDate.setFullYear(vDate.getFullYear(), 2, 31);
else if( vDate.getMonth()==3 || vDate.getMonth()==4 || vDate.getMonth()==5 )
vDate.setFullYear(vDate.getFullYear(), 5, 30);
else if( vDate.getMonth()==6 || vDate.getMonth()==7 || vDate.getMonth()==8 )
vDate.setFullYear(vDate.getFullYear(), 8, 30);
else if( vDate.getMonth()==9 || vDate.getMonth()==10 || vDate.getMonth()==11 )
vDate.setFullYear(vDate.getFullYear(), 11, 31);
}
return(vDate);
};
JSGantt.findObj = function (theObj, theDoc)
{
var p, i, foundObj;
if(!theDoc) {theDoc = document;}
if( (p = theObj.indexOf("?")) > 0 && parent.frames.length){
theDoc = parent.frames[theObj.substring(p+1)].document;
theObj = theObj.substring(0,p);
}
if(!(foundObj = theDoc[theObj]) && theDoc.all)
{foundObj = theDoc.all[theObj];}
for (i=0; !foundObj && i < theDoc.forms.length; i++)
{foundObj = theDoc.forms[i][theObj];}
for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++)
{foundObj = JSGantt.findObj(theObj,theDoc.layers[i].document);}
if(!foundObj && document.getElementById)
{foundObj = document.getElementById(theObj);}
return foundObj;
};
JSGantt.changeFormat =      function(pFormat,ganttObj) {
if(ganttObj)
{
ganttObj.setFormat(pFormat);
ganttObj.DrawDependencies();
}
else
{alert('Chart undefined');};
};
JSGantt.folder= function (pID,ganttObj) {
var vList = ganttObj.getList();
for(i = 0; i < vList.length; i++)
{
if(vList[i].getID() == pID) {
if( vList[i].getOpen() == 1 ) {
vList[i].setOpen(0);
JSGantt.hide(pID,ganttObj);
if (JSGantt.isIE())
{JSGantt.findObj('group_'+pID).innerText = '+';}
else
{JSGantt.findObj('group_'+pID).textContent = '+';}
} else {
vList[i].setOpen(1);
JSGantt.show(pID, 1, ganttObj);
if (JSGantt.isIE())
{JSGantt.findObj('group_'+pID).innerText = '�';}
else
{JSGantt.findObj('group_'+pID).textContent = '�';}
}
}
}
};
JSGantt.hide=     function (pID,ganttObj) {
var vList = ganttObj.getList();
var vID   = 0;
for(var i = 0; i < vList.length; i++)
{
if(vList[i].getParent() == pID) {
vID = vList[i].getID();
JSGantt.findObj('child_' + vID).style.display = "none";
JSGantt.findObj('childgrid_' + vID).style.display = "none";
vList[i].setVisible(0);
if(vList[i].getGroup() == 1)
{JSGantt.hide(vID,ganttObj);}
}
}
};
JSGantt.show =  function (pID, pTop, ganttObj) {
var vList = ganttObj.getList();
var vID   = 0;
for(var i = 0; i < vList.length; i++)
{
if(vList[i].getParent() == pID) {
vID = vList[i].getID();
if(pTop == 1) {
if (JSGantt.isIE()) { // IE;
if( JSGantt.findObj('group_'+pID).innerText == '+') {
JSGantt.findObj('child_'+vID).style.display = "";
JSGantt.findObj('childgrid_'+vID).style.display = "";
vList[i].setVisible(1);
}
} else {
if( JSGantt.findObj('group_'+pID).textContent == '+') {
JSGantt.findObj('child_'+vID).style.display = "";
JSGantt.findObj('childgrid_'+vID).style.display = "";
vList[i].setVisible(1);
}
}
} else {
if (JSGantt.isIE()) { // IE;
if( JSGantt.findObj('group_'+pID).innerText == '�') {
JSGantt.findObj('child_'+vID).style.display = "";
JSGantt.findObj('childgrid_'+vID).style.display = "";
vList[i].setVisible(1);
}
} else {
if( JSGantt.findObj('group_'+pID).textContent == '�') {
JSGantt.findObj('child_'+vID).style.display = "";
JSGantt.findObj('childgrid_'+vID).style.display = "";
vList[i].setVisible(1);
}
}
}
if(vList[i].getGroup() == 1)
{JSGantt.show(vID, 0,ganttObj);}
}
}
};
JSGantt.taskLink = function(pRef,pWidth,pHeight)
{
if(pWidth)  {vWidth =pWidth;}  else {vWidth =400;}
if(pHeight) {vHeight=pHeight;} else {vHeight=400;}
var OpenWindow=window.open(pRef, "newwin", "height="+vHeight+",width="+vWidth);
};
JSGantt.parseDateStr = function(pDateStr,pFormatStr) {
var vDate =new Date();
vDate.setTime( Date.parse(pDateStr));
switch(pFormatStr)
{
case 'mm/dd/yyyy':
var vDateParts = pDateStr.split('/');
vDate.setFullYear(parseInt(vDateParts[2], 10), parseInt(vDateParts[0], 10) - 1, parseInt(vDateParts[1], 10));
break;
case 'dd/mm/yyyy':
var vDateParts = pDateStr.split('/');
vDate.setFullYear(parseInt(vDateParts[2], 10), parseInt(vDateParts[1], 10) - 1, parseInt(vDateParts[0], 10));
break;
case 'yyyy-mm-dd':
var vDateParts = pDateStr.split('-');
vDate.setFullYear(parseInt(vDateParts[0], 10), parseInt(vDateParts[1], 10) - 1, parseInt(vDateParts[1], 10));
break;
}
return(vDate);
};
JSGantt.formatDateStr = function(pDate,pFormatStr) {
vYear4Str = pDate.getFullYear() + '';
vYear2Str = vYear4Str.substring(2,4);
vMonthStr = (pDate.getMonth()+1) + '';
vDayStr   = pDate.getDate() + '';
if( vMonthStr.length == 1 ){
vMonthStr = '0' + vMonthStr;
}
if( vDayStr.length == 1 ){
vDayStr = '0' + vDayStr;
}
var vDateStr = "";
switch(pFormatStr) {
case 'mm/dd/yyyy':
return( vMonthStr + '/' + vDayStr + '/' + vYear4Str );
case 'dd/mm/yyyy':
return( vDayStr + '/' + vMonthStr + '/' + vYear4Str );
case 'yyyy-mm-dd':
return( vYear4Str + '-' + vMonthStr + '-' + vDayStr );
case 'mm/dd/yy':
return( vMonthStr + '/' + vDayStr + '/' + vYear2Str );
case 'dd/mm/yy':
return( vDayStr + '/' + vMonthStr + '/' + vYear2Str );
case 'yy-mm-dd':
return( vYear2Str + '-' + vMonthStr + '-' + vDayStr );
case 'mm/dd':
return( vMonthStr + '/' + vDayStr );
case 'dd/mm':
return( vDayStr + '/' + vMonthStr );
}
};
JSGantt.parseXML = function(ThisFile,pGanttVar){
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;   // Is this Chrome
try { //Internet Explorer
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e) {
try { //Firefox, Mozilla, Opera, Chrome etc.
if (is_chrome==false) {  xmlDoc=document.implementation.createDocument("","",null); }
}
catch(e) {
alert(e.message);
return;
}
}
if (is_chrome==false) { 	// can't use xmlDoc.load in chrome at the moment
xmlDoc.async=false;
xmlDoc.load(ThisFile);		// we can use  loadxml
JSGantt.AddXMLTask(pGanttVar);
xmlDoc=null;			// a little tidying
Task = null;
}
else {
JSGantt.ChromeLoadXML(ThisFile,pGanttVar);
ta=null;	// a little tidying
}
};
JSGantt.AddXMLTask = function(pGanttVar){
Task=xmlDoc.getElementsByTagName("task");
var n = xmlDoc.documentElement.childNodes.length;	// the number of tasks. IE gets this right, but mozilla add extra ones (Whitespace)
for(var i=0;i<n;i++) {
try { pID = Task[i].getElementsByTagName("pID")[0].childNodes[0].nodeValue;
} catch (error) {pID =0;}
pID *= 1;	// make sure that these are numbers rather than strings in order to make jsgantt.js behave as expected.
if(pID!=0){
try { pName = Task[i].getElementsByTagName("pName")[0].childNodes[0].nodeValue;
} catch (error) {pName ="No Task Name";}			// If there is no corresponding entry in the XML file the set a default.
try { pColor = Task[i].getElementsByTagName("pColor")[0].childNodes[0].nodeValue;
} catch (error) {pColor ="0000ff";}
try { pParent = Task[i].getElementsByTagName("pParent")[0].childNodes[0].nodeValue;
} catch (error) {pParent =0;}
pParent *= 1;
try { pStart = Task[i].getElementsByTagName("pStart")[0].childNodes[0].nodeValue;
} catch (error) {pStart ="";}
try { pEnd = Task[i].getElementsByTagName("pEnd")[0].childNodes[0].nodeValue;
} catch (error) { pEnd ="";}
try { pLink = Task[i].getElementsByTagName("pLink")[0].childNodes[0].nodeValue;
} catch (error) { pLink ="";}
try { pMile = Task[i].getElementsByTagName("pMile")[0].childNodes[0].nodeValue;
} catch (error) { pMile=0;}
pMile *= 1;
try { pRes = Task[i].getElementsByTagName("pRes")[0].childNodes[0].nodeValue;
} catch (error) { pRes ="";}
try { pComp = Task[i].getElementsByTagName("pComp")[0].childNodes[0].nodeValue;
} catch (error) {pComp =0;}
pComp *= 1;
try { pGroup = Task[i].getElementsByTagName("pGroup")[0].childNodes[0].nodeValue;
} catch (error) {pGroup =0;}
pGroup *= 1;
try { pOpen = Task[i].getElementsByTagName("pOpen")[0].childNodes[0].nodeValue;
} catch (error) { pOpen =1;}
pOpen *= 1;
try { pDepend = Task[i].getElementsByTagName("pDepend")[0].childNodes[0].nodeValue;
} catch (error) { pDepend =0;}
if (pDepend.length==0){pDepend=''} // need this to draw the dependency lines
try { pCaption = Task[i].getElementsByTagName("pCaption")[0].childNodes[0].nodeValue;
} catch (error) { pCaption ="";}
pGanttVar.AddTaskItem(new JSGantt.TaskItem(pID , pName, pStart, pEnd, pColor,  pLink, pMile, pRes,  pComp, pGroup, pParent, pOpen, pDepend,pCaption, oneDayLabel, daysLabel));
}
}
};
JSGantt.ChromeLoadXML = function(ThisFile,pGanttVar){
XMLLoader = new XMLHttpRequest();
XMLLoader.onreadystatechange= function(){
JSGantt.ChromeXMLParse(pGanttVar);
};
XMLLoader.open("GET", ThisFile, false);
XMLLoader.send(null);
};
JSGantt.ChromeXMLParse = function (pGanttVar){
if (XMLLoader.readyState == 4) {
var ta=XMLLoader.responseText.split(/<task>/gi);
var n = ta.length;	// the number of tasks.
for(var i=1;i<n;i++) {
Task = ta[i].replace(/<[/]p/g, '<p');
var te = Task.split(/<pid>/i);
if(te.length> 2){var pID=te[1];} else {var pID = 0;}
pID *= 1;
var te = Task.split(/<pName>/i);
if(te.length> 2){var pName=te[1];} else {var pName = "No Task Name";}
var te = Task.split(/<pstart>/i);
if(te.length> 2){var pStart=te[1];} else {var pStart = "";}
var te = Task.split(/<pEnd>/i);
if(te.length> 2){var pEnd=te[1];} else {var pEnd = "";}
var te = Task.split(/<pColor>/i);
if(te.length> 2){var pColor=te[1];} else {var pColor = '0000ff';}
var te = Task.split(/<pLink>/i);
if(te.length> 2){var pLink=te[1];} else {var pLink = "";}
var te = Task.split(/<pMile>/i);
if(te.length> 2){var pMile=te[1];} else {var pMile = 0;}
pMile  *= 1;
var te = Task.split(/<pRes>/i);
if(te.length> 2){var pRes=te[1];} else {var pRes = "";}
var te = Task.split(/<pComp>/i);
if(te.length> 2){var pComp=te[1];} else {var pComp = 0;}
pComp  *= 1;
var te = Task.split(/<pGroup>/i);
if(te.length> 2){var pGroup=te[1];} else {var pGroup = 0;}
pGroup *= 1;
var te = Task.split(/<pParent>/i);
if(te.length> 2){var pParent=te[1];} else {var pParent = 0;}
pParent *= 1;
var te = Task.split(/<pOpen>/i);
if(te.length> 2){var pOpen=te[1];} else {var pOpen = 1;}
pOpen *= 1;
var te = Task.split(/<pDepend>/i);
if(te.length> 2){var pDepend=te[1];} else {var pDepend = "";}
if (pDepend.length==0){pDepend=''} // need this to draw the dependency lines
var te = Task.split(/<pCaption>/i);
if(te.length> 2){var pCaption=te[1];} else {var pCaption = "";}
pGanttVar.AddTaskItem(new JSGantt.TaskItem(pID , pName, pStart, pEnd, pColor,  pLink, pMile, pRes,  pComp, pGroup, pParent, pOpen, pDepend,pCaption, oneDayLabel, daysLabel 	));
};
};
};
JSGantt.benchMark = function(pItem){
var vEndTime=new Date().getTime();
alert(pItem + ': Elapsed time: '+((vEndTime-vBenchTime)/1000)+' seconds.');
vBenchTime=new Date().getTime();
};
$(document).ready(function(){
var form = {
identities: [],
identityKey: '',
initialize: function(){
var that = this;
this.identities = $.parseJSON( $( '#msscubscription_identities_as_json' ).text() );
if( this.identities != null ){
$.each(this.identities,function( identityKey, identityObject ){
that.identityKey = identityKey;
});
}
},
refreshGroup: function( context )
{
var that = context;
if( that.calculateValue( 'has_invoice_data' ) == 1 ){
$("#msSubscriptionFormCheckoutIdentity_has_invoice_data").attr("checked", "checked");
that.showFields( "mssubscription_invoice" );
}else{
$("#msSubscriptionFormCheckoutIdentity_has_invoice_data").attr("checked", "");
that.hideFields( "mssubscription_invoice" );
}
if( that.calculateValue( 'has_delivery_data' ) == 1 ){
$("#msSubscriptionFormCheckoutIdentity_has_delivery_data").attr("checked", "checked");
that.showFields( "mssubscription_delivery" );
}else{
$("#msSubscriptionFormCheckoutIdentity_has_delivery_data").attr("checked", "");
that.hideFields( "mssubscription_delivery" );
}
},
clearInputField: function( inputField ){
inputField.each( function(){
$(this).val('');
})
},
bindEvents: function(){
$("#msSubscriptionFormCheckoutIdentity_has_invoice_data").bind("click", {that: this, classIdentifier: "mssubscription_invoice"}, this.formPartToggle );
$("#msSubscriptionFormCheckoutIdentity_has_delivery_data").bind("click", {that: this, classIdentifier: "mssubscription_delivery"}, this.formPartToggle );
for (var identityKey in this.identities) {
$( "#mssubscription_identity_" + identityKey ).bind("click", {that: this, identityKey: identityKey}, this.fillIdentity );
}
$( "#mssubscription_identity_add_new" ).bind("click", {that: this }, this.clearIdentity );
},
clearFields: function( event ){
var that = event.data.that;
that.fillInput( 'identity_name', '' );
that.fillInput( 'contact_first_name', '' );
that.fillInput( 'contact_last_name', '' );
that.fillInput( 'contact_address', '' );
that.fillInput( 'contact_building_number', '' );
that.fillInput( 'contact_apartment_number', '' );
that.fillInput( 'contact_town', '' );
that.fillInput( 'contact_postal_code', '' );
that.fillInput( 'contact_postal_area', '' );
that.fillInput( 'invoice_name', '' );
that.fillInput( 'invoice_address', '' );
that.fillInput( 'contact_first_name', '' );
that.fillInput( 'invoice_building_number', '' );
that.fillInput( 'invoice_apartment_number', '' );
that.fillInput( 'invoice_town', '' );
that.fillInput( 'invoice_postal_code', '' );
that.fillInput( 'invoice_postal_area', '' );
that.fillInput( 'invoice_tax_id', '' );
that.fillInput( 'has_delivery_data', '' );
that.fillInput( 'delivery_first_name', '' );
that.fillInput( 'delivery_last_name', '' );
that.fillInput( 'delivery_name', '' );
that.fillInput( 'delivery_address', '' );
that.fillInput( 'delivery_building_number', '' );
that.fillInput( 'delivery_apartment_number', '' );
that.fillInput( 'delivery_town', '' );
that.fillInput( 'delivery_postal_code', '' );
that.fillInput( 'delivery_postal_area', '' );
},
clearIdentity: function( event ){
var that = event.data.that;
that.clearFields( event );
that.identityAdd( this );
that.refreshGroup( that );
$("#msSubscriptionFormCheckoutIdentity_has_invoice_data").attr("checked", "");
that.hideFields( "mssubscription_invoice" );
$("#msSubscriptionFormCheckoutIdentity_has_delivery_data").attr("checked", "");
that.hideFields( "mssubscription_delivery" );
event.preventDefault();
},
fillIdentity: function( event ){
var that = event.data.that;
that.identityKey = event.data.identityKey;
that.clearFields( event );
that.refreashField( 'identity_name' );
that.refreashField( 'contact_first_name' );
that.refreashField( 'contact_last_name' );
that.refreashField( 'contact_address' );
that.refreashField( 'contact_building_number' );
that.refreashField( 'contact_apartment_number' );
that.refreashField( 'contact_town' );
that.refreashField( 'contact_postal_code' );
that.refreashField( 'contact_postal_area' );
if( that.calculateValue( 'has_invoice_data' ) == 1 ){
that.refreashField( 'invoice_name' );
that.refreashField( 'invoice_address' );
that.refreashField( 'contact_first_name' );
that.refreashField( 'invoice_building_number' );
that.refreashField( 'invoice_apartment_number' );
that.refreashField( 'invoice_town' );
that.refreashField( 'invoice_postal_code' );
that.refreashField( 'invoice_postal_area' );
that.refreashField( 'invoice_tax_id' );
}
if( that.calculateValue( 'has_delivery_data' ) == 1 ){
that.refreashField( 'has_delivery_data' );
that.refreashField( 'delivery_first_name' );
that.refreashField( 'delivery_last_name' );
that.refreashField( 'delivery_name' );
that.refreashField( 'delivery_address' );
that.refreashField( 'delivery_building_number' );
that.refreashField( 'delivery_apartment_number' );
that.refreashField( 'delivery_town' );
that.refreashField( 'delivery_postal_code' );
that.refreashField( 'delivery_postal_area' );
}
that.identitySwitch( this );
that.refreshGroup( that );
event.preventDefault();
},
identityAdd: function( switchedElement ){
$( ".mssubscription_identity_switch" ).parent().removeClass('choosen');
$( switchedElement ).parent().addClass('choosen');
$( "#msSubscriptionFormCheckoutIdentity_identity_id" ).val( '' );
},
identitySwitch: function( switchedElement ){
$( ".mssubscription_identity_switch" ).parent().removeClass('choosen');
$( switchedElement ).parent().addClass('choosen');
var id = $( switchedElement ).attr( 'id' ).substr( 'mssubscription_identity_'.length );
$( "#msSubscriptionFormCheckoutIdentity_identity_id" ).val( id );
},
calculateValue: function( identifier ){
return this.identities[this.identityKey][identifier];
},
refreashField: function( identifier ){
var value = this.calculateValue( identifier );
this.fillInput( identifier, value );
},
fillInput: function( filedPrefix, value ){
$( "#msSubscriptionFormCheckoutIdentity_" + filedPrefix ).val( value );
},
formPartToggle: function( event ){
if( !$(this).attr("checked") )
{
event.data.that.hideFields( event.data.classIdentifier );
}
else
{
event.data.that.showFields( event.data.classIdentifier );
}
},
hideFields: function( classIdentifier ){
$("." + classIdentifier).each( function(){
$(this).parent().hide();
});
},
showFields: function( classIdentifier ){
$("." + classIdentifier).each( function(){
$(this).parent().show();
});
},
};
form.initialize();
form.bindEvents();
});

