// bug 22 may 24 11
// ashsish 
function startExport(){
                //Get reference to chart.
                var chart = getChartFromId("myGanttChart");
                //Now, we proceed with exporting only if chart has finished rendering.
                //We do not check rendering of export component, as FusionCharts Export Object JS
                //has a built-in queue that stacks up the export request until the component is ready.
                if (chart.hasRendered()==true){
                    chart.exportChart();
                }else{
                    alert("Please wait for the chart to finish rendering, before you can invoke exporting");
                }
 }

 
var staffColors = ['003300','993333','000066','33ccff','ff0000','00ff00','ffff00','00ffff','ff0066','990000','660066','ff99cc','996633','ff6600'];
var zipStaffColors = new zipAlt(staffColors);
var ganttXmlLegend = new Entity(ganttXmlLegend, true, [0, [zipStaffColors]]);
var ganttXmlProcesses = new Entity(ganttXmlProcesses, true,[0,1]);
var ganttXmlTask = new Entity(ganttXmlTask,true,[0,1,2,3,1,4,5,6]); 
	
function weekHeaders(startDate) {
	this.cdate = firstDayOfWeek(startDate);
	this.stat = 0;
	this.week = 1;		
}

weekHeaders.prototype.draw = function(){
	var ret;
	if ( this.stat == 0 ) {
		ret = this.cdate;
		this.cdate = lastDayOfWeek(this.cdate);
		this.stat  = 1; 
	} else if (this.stat == 1) { 
		ret = this.cdate;
		this.cdate = new Date ( this.cdate.getTime() + 24*3600*1000 ); 
		this.stat = 2; 
	} else {
		ret = 'Week ' + this.week;
		this.week++;
		this.stat = 0; 
	}
	return ret;
}

function monthHeaders(startDate) {
	this.cdate = firstDayOfMonth(startDate);
	this.stat = 0;
}

monthHeaders.prototype.draw = function() {
	var ret; 
	if  (this.stat == 0 ) {
		ret = this.cdate; 
		this.cdate = lastDayOfMonth(this.cdate);
		this.stat = 1; 
	} else if ( this.stat == 1 ) { 
		ret = this.cdate; 
		this.stat = 2;
	} else {
		m = this.cdate.getMonth()+1;
		ret = m + '/' + this.cdate.getFullYear();
		this.cdate = new Date (this.cdate.getTime() + 24*3600*1000); 
		this.stat = 0; 
	}
	return ret;	
}

ganttXmlHeaders.draw = function ( startDate, duration) {
	var finishDate = addDays(startDate, duration-1);
	var width=200, width1=0; 
	var headers, d1, d2, l; 
	if ( duration > 40 ) {
		headers = new monthHeaders(startDate);
		width1 = 50;
	} else {
		headers = new weekHeaders(startDate);
		width1 = 50; 
	}
	var ret = '';
	do {
		d1 = headers.draw();
		d2 = headers.draw();
		l = headers.draw();
		ret += ganttXmlHeaders.zip([toMDY(d1), toMDY2(d2), l]);
		width += width1;		
	} while ( d2.getTime() < finishDate.getTime() );  
	return Array(ret,width);	
} 

var ganttXmlStaff = new Entity(ganttXmlStaff,true);
var ganttXml = new Entity(ganttXml,false,[0,1,2,3,4,[ganttXmlProcesses],[ganttXmlStaff],[ganttXmlTask],4, [ganttXmlLegend]]);
var gantt = new Entity(gantt, false, ["title.draw(['gantt chart']);",0]);
gantt.refresh = function () {
	var id = $('#scheduleIds').val();
    $.ajax({
    	data: {q:"getGantt", d: id}, 
		success:function(data, textStatus) {
    		if ( ! data ) return;
			try { 
				gantt.draw1(data);
			} catch (e) {
				myCatch(e); 
			} 
		}
	});    
}

/* [[info][tasks]  
 * [info] = [name = stname + kname duration rule]
 * [reqs] = [ rname from to ] 
 * [tasks] = [ tname preceding preceded ]
 * [staffs] = [sname]
 * [details] = [req_id task_id staff_id from_time to_time percent]    
 */
gantt.draw1 = function(data) {	

	// start & finish date of the whole chart  
	var sd = $('#startDate').val();
	var startDate, finishDate, duration = data[0][1]-0;
	if ( sd) {    	
    	startDate = Date.parse(sd);
    }
	if ( ! sd || isNaN(startDate)) {
		startDate = nextDay(new Date());
	} else {
		startDate = new Date(startDate);
	}		    			
	finishDate = addDays(startDate, duration -1); // duration 

    // merge req, tasks
    var numColors = staffColors.length;
    // data1 process, data2 staff, data3 tasks
    var data1=new Array(), data2=new Array(), data3 = new Array();
    var lastReq=-1, lastProcessId="", lc=0, lc3 = 0, llc = -1;
    var tname="", sname="", processId="";
    for(var i=0; i < data[4].length; i++) {
    	var detail= data[4][i];
    	if ( lastReq != detail[0]) {
    		processId = ''+detail[0];
    		tname = fusionSpecial(data[1][detail[0]][0]);
    		data1[lc] = new Array(tname,processId);
    		data3[lc3] = new Array(tname, processId,finishDate,startDate,'AAAAAA',100,0);
    		data2[lc] = new Array('');
    		if ( lastReq != -1 ){
    			data3[llc][2] = toMDY(data3[llc][2]);
    			data3[llc][3] = toMDY2(data3[llc][3]);
    		}
    		llc = lc3;
    		lc++;
    		lc3++;
    		lastReq = detail[0];
    		lastProcessId = processId;
    	}
    	var fromDate = addDays(startDate, detail[3]-1), toDate = addDays(startDate, detail[4]-1); // bug 22 may 24 11 - 0 replaced by 1
    	if ( fromDate < data3[llc][2] ){ 
    		data3[llc][2] = fromDate;
    	}
    	if ( toDate > data3[llc][3]) {
    		data3[llc][3] = toDate;
    	}
    	tname =  '    *' + fusionSpecial(data[2][detail[1]][0]);
    	sname = fusionSpecial(data[3][detail[2]][0]) + ( detail[5] < 100 ? '('+detail[5]+')' : ''); 
    	processId = ''+detail[0]+'-'+detail[1]+'-'+detail[2];
    	if ( processId != lastProcessId) {
    		data2[lc] = new Array(sname);
    		data1[lc] = new Array(tname,processId);
    		data3[lc3] = new Array(tname,processId,toMDY(fromDate),toMDY2(toDate), staffColors[detail[2] % numColors], 
    				detail[5], 50 - detail[5]/2 );    
    		lc++;
    		lc3++;
    		lastProcessId = processId;
    	} else {
    		data3[lc3] = new Array(tname,processId,toMDY(fromDate),toMDY2(toDate), staffColors[detail[2] % numColors], 
    				detail[5], 50 - detail[5]/2 );
    		lc3++;
    	}
    } 
	data3[llc][2] = toMDY(data3[llc][2]);
	data3[llc][3] = toMDY2(data3[llc][3]);
    
	// processes = requirement
	ganttXmlProcesses.set(data1);  

    ganttXmlStaff.set(data2);
    
	// legend - each staff has one color 
	ganttXmlLegend.set(data[3]);
	zipStaffColors.reset();

	// tasks 
	ganttXmlTask.set(data3); 
    
    var h1=200, h2=25;
	var head =  ganttXmlHeaders.draw(startDate, duration);
   	$('#rightside').html( gantt.draw([h1+h2*data1.length])); //[0.8*(getSize())[1]] )); // [h1+h2*data1.length];
	var gchart = new FusionCharts("fusion/FusionWidgets_Professional/Charts/Gantt.swf","myGanttChart", 
   		''+ $('#ganttChart').attr('clientWidth'), 
   		"" + (h1+h2*data1.length),'0','1'); //  document.getElementById('ganttChart').clientHeight,"0","1");
   	var d1 = toMDY(startDate), d2 = toMDY2(finishDate);
   	var panes = Math.floor(duration/20)+1;
   	if (panes < 10) panes = 10;
   	var xml = ganttXml.draw([panes,d1, d2, data[0][0], head[0],'']);
   	gchart.setDataXML(xml);
   	gchart.render('ganttChart');   	
   	    
    //Render the exporter SWF in our DIV fcexpDiv
    //myExportComponent.Render("fcexpDiv");

}

