
// COPYWRITE 2006 - For academic use only!

function getWidthSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
	return myWidth;
}

function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	// Tested with relative and nested objects
	o = document.getElementById(objectId)
	oLeft = o.offsetLeft            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent    // Get parent object reference
		oLeft += oParent.offsetLeft // Add parent left position
		o = oParent
	}
	// Return left postion
	return oLeft
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	// Tested with relative and nested objects
	o = document.getElementById(objectId)
	oTop = o.offsetTop            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent  // Get parent object reference
		oTop += oParent.offsetTop // Add parent top position
		o = oParent
	}
	// Return top position
	return oTop
}

function restartPage() {
  var sure= confirm("All selections will be lost forever. Do you sure you want to restart?");
   if (sure== true)
   {
     window.location.reload(false);
   }
}

var stakeholderNameArray = new Array();
var solutionNameArray = new Array();
var grade = new Array();
var stakeholderNameNum = 0;
var solutionNum = 0;
var printCanvasMsg = "";

function setgrade(s,t)
{
  if (grade[s]==undefined)
	{
	  grade[s]=new Array();
	}
	
	var dir=0;
	if(eval('document.gradesForm.harmed'+s+'_'+t+'[0].checked'))
	{
		dir=0;
	} else if(eval('document.gradesForm.harmed'+s+'_'+t+'[1].checked')) {
		dir=1;
	} else {
		dir=-1;
	}
	
	var gra=0;
	var obj=eval('document.gradesForm.grade'+s+'_'+t);
	
	if (dir==0) for (var x=0; x< obj.length; ++x) obj[x].disabled=true;
	else for (var x=0; x< obj.length; ++x) obj[x].disabled=false;
	
	for (var x=0; x< obj.length; ++x)
	{
	  if (obj[x].checked)
		{
		  gra=x+1;
			break;
		}
	}
  grade[s][t]=dir*gra;
	drawOnCanvas();
}

function init() {
  var msg = '<h3>How many major stakeholders can you indentify?';
	msg = msg + '<SELECT NAME="numstakeholders" onchange="javascript:changeNumStakeholders();">';
	msg = msg + '<OPTION value="0" selected>Please select';
	for (var x=1; x<9; x++) msg = msg + '<OPTION value="'+x+'" '+(stakeholderNameNum==x?"SELECTED":"")+'>'+x;
  msg = msg + '</SELECT></h3>';
	document.getElementById('numstakeholdersFrom').innerHTML=msg;
	
	document.getElementById('stakeholdersNamesForm').innerHTML="";
	document.getElementById('solutionsNamesForm').innerHTML="";
	document.getElementById('gradesForm').innerHTML="";
	document.getElementById('buttonForm').innerHTML="";
	document.getElementById('canvas').innerHTML="";
	document.getElementById('canvasfloat').innerHTML="";
	
	if (stakeholderNameNum>0) changeNumStakeholders();
}

function changeNumStakeholders()
{
  var msg = "";
  msg = msg + "<h3>Name your major stakeholders:</h3>";
  
  for (var x = 1; x <= document.numstakeholdersFrom.elements[0].value; x++)
  {
		msg = msg + x + ". <INPUT type=text size=20 maxlength=20 "+(stakeholderNameArray[x-1]==undefined?'':'value="'+stakeholderNameArray[x-1]+'"')+"></INPUT><br>";
  }
	if (document.numstakeholdersFrom.elements[0].value>0)
	{
		msg = msg + '<button name=done onclick="javascript:solutionStep()">DONE</button>';
	}
	document.getElementById('stakeholdersNamesForm').innerHTML=msg
	
}

function solutionStep()
{
  stakeholderNameNum = document.numstakeholdersFrom.elements[0].value;


  document.getElementById('numstakeholdersFrom').innerHTML="";
  
  var msg = "";
	msg = msg + "<h3>"+stakeholderNameNum+" major stakeholders:</h3>";
	msg = msg + "<ul type=circle>";
  for (var x = 0; x < stakeholderNameNum; x++)
  {
	  stakeholderNameArray[x]=(document.getElementById('stakeholdersNamesForm').elements[x].value!="")?document.getElementById('stakeholdersNamesForm').elements[x].value:"stakeholder "+(x+1);
		msg = msg + "<li>"+stakeholderNameArray[x]+"</li>";
  }
	msg = msg + "</ul>";
	document.getElementById('stakeholdersNamesForm').innerHTML=msg
	msg="<h3>How many major solutions for your ethical dilemma can you identify?</h3>";
	msg = msg + "<SELECT name=numSolutions onchange=javascript:changeNumSolutions()><OPTION value=0>Please select";
	for (var x = 1; x < 9; x++)
	{
	  msg = msg + "<OPTION value='"+x+"' "+(solutionNum==x?"SELECTED":"")+">"+x;
	}
	msg = msg + "</SELECT>";
	
	document.getElementById('solutionsNumForm').innerHTML=msg;
	
	if (solutionNum>0) changeNumSolutions();
	
	document.getElementById("buttonForm").innerHTML='<br><br><hr><button onclick="javascript:restartPage()">RESTART</button>';
}

function changeNumSolutions()
{
  solutionNum=document.getElementById('solutionsNumForm').elements[0].value;

  var msg = "";
  msg = msg + "<h3>Name your major solutions:</h3>";
  
  for (var x = 1; x <= solutionNum; x++)
  {
		msg = msg + x + ". <INPUT type=text size=20 maxlength=20 "+(solutionNameArray[x-1]==undefined?'':'value="'+solutionNameArray[x-1]+'"')+"></INPUT><br>";
  }
	if (solutionNum>0)
	{
		msg = msg + "<button onclick='javascript:saveSolutionName();gradeStakeHolder()' >DONE</button>";
	}
	document.getElementById('solutionsNamesForm').innerHTML=msg
}

function saveSolutionName() {
  for (var x = 0; x< solutionNum; x++)
	{
	  solutionNameArray[x]=document.getElementById('solutionsNamesForm').elements[x].value;
	}
  document.getElementById('solutionsNamesForm').innerHTML="";
  document.getElementById('solutionsNumForm').innerHTML="";
}

function gradeStakeHolder()
{
  var msg = ""; 
	msg = msg + "For each solution, indicate whether each stakeholder is benefited or harmed";
  for (var x = 0; x< solutionNum; x++)
	{
	  msg = msg + "<h3>Solution "+(x+1)+": "+solutionNameArray[x]+"<\h3>";
		msg = msg + '<table border="0" cellpadding="0" cellspacing="5"  >';
		msg = msg + '<tr align=middle><td colspan=5></td><td colspan=5><font>Intensity (1 very little, 5 very much)</font></td></tr>';
		msg = msg + '<tr align=middle><td colspan=5></td>';
		
		for (var z = 1; z <= 5; z++)
		{
		  msg = msg + '<td>'+z+'</td>';
		}
		msg = msg + '</tr>';

		for (var y = 0; y < stakeholderNameNum; y++)
		{
		  var curGrade=0;
		  if (grade[x]!=undefined) curGrade= grade[x][y];
		  var x_y=x+'_'+y;
		  msg = msg + "<tr align=middle><td align=left><font>"+stakeholderNameArray[y]+"</font></td>";
		  msg = msg + '<td><input type="radio" name="harmed'+x_y+'" '+(curGrade==0?"checked":"")+' onClick="setgrade('+x+','+y+')"><font color="green">Neutral</font></td>';
		  msg = msg + '<td><input type="radio" name="harmed'+x_y+'" '+(curGrade>0?"checked":"")+' onClick="setgrade('+x+','+y+')"><font color="blue">Benefit</font></td>';
		  msg = msg + '<td><input type="radio" name="harmed'+x_y+'" '+(curGrade<0?"checked":"")+' onClick="setgrade('+x+','+y+')"><font color="red">Harm</font></td>';
		  msg = msg + '<td width=5%></td>';
			
			var gradeAbs= Math.abs(curGrade);
  		for (var z = 1; z <= 5; z++)
  		{
  		  msg = msg + '<td><input type="radio" name="grade'+x_y+'" onClick="setgrade('+x+','+y+')" '
				msg = msg +(curGrade==0?"DISABLED ":"");
				msg = msg +(gradeAbs==z?"CHECKED":"")+'></td>';
			}
 			msg = msg + "</tr>"; 
		}
		msg = msg + "</table><hr>";
	}
	
	document.getElementById('gradesForm').innerHTML=msg
	
	drawOnCanvas();
}

function printCanvas()
{
//  var popup=window.open("",'VisuEthics - print', 'height='+document.getElementById('canvas').height+',width=255,toolbar=no');
//	var msg = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
//	msg = msg + '<html><head><script src="visuethics.js"></script></head>';
//	msg = msg + '<body onload = "drawOnCanvas(true)>';
//	msg = msg + '<div id="canvas" align="center"></div><div id="canvasfloat"></div>';
//	msg = msg + '</body></html>';
//	popup.document.write(msg);
//  window.print();
  
	// make printer friendly
	document.getElementById('stakeholdersNamesForm').innerHTML="";
	document.getElementById('gradesForm').innerHTML="";
	drawOnCanvas(true);
	//window.print();
	
	return false;
}

function drawOnCanvas(ShowPrintButton)
{
  var delta = getWidthSize()/20;
	var cellheight = 20 * stakeholderNameNum;
  var msg="";
	msg = msg + '<table border="0" cellpadding="8" cellspacing="0" width="840" align="left">'; 
	msg = msg + '<col width=150><col width=10 style="background-color:yellow"><col width=130><col width=10 style="background-color:yellow"><col width=130><col width=10 style="background-color:yellow"><col width=130><col width=10 style="background-color:yellow"><col width=130><col width=10 style="background-color:yellow"><col width=130>';
//  msg = msg + '<tr><th></th><th id="grade5">5</th><th></th><th id="grade4">4</th><th></th><th id="grade3">3</th><th></th><th id="grade2">2</th><th></th><th id="grade1">1</th><th></th></tr>';
  msg = msg + '<tr><th></th><th id="grade1">1</th><th></th><th id="grade2">2</th><th></th><th id="grade3">3</th><th></th><th id="grade4">4</th><th></th><th id="grade5">5</th><th></th></tr>';
	
	for (var x=0; x<solutionNum; x++)
	{ //style="border-left:5px solid green"
	  msg = msg + '<tr><td><br></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>';
  	msg = msg + '<tr id="rowoption'+x+'"><td bgcolor="#EF5A10" height='+cellheight+'>SOLUTION '+(x+1)+'<br>'+solutionNameArray[x]+'</td>';
		msg = msg + '<td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>';
	}
  msg = msg + '<tr><td><br></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>';
	if (ShowPrintButton==true)
	{
		msg = msg + '<tr><td colspan=3><button onclick="javascript:window.print();">PRINT</button><button onclick="javascript:gradeStakeHolder();">BACK</button></td></tr>';
	} else
	{
		msg = msg + '<tr><td colspan=3><button onclick="javascript:restartPage()">RESTART</button><button onclick="javascript:printCanvas(); return false">PRINTER FRIENDLY</button><button onclick="javascript:init();">BACK</button></td></tr>';
	}
	msg = msg + '</table>'; 

  document.getElementById('canvas').innerHTML=msg
	document.getElementById("buttonForm").innerHTML='';
	
  var gradeLoc = Array(0,getAbsoluteLeft("grade1"),getAbsoluteLeft("grade2"),getAbsoluteLeft("grade3"),getAbsoluteLeft("grade4"),getAbsoluteLeft("grade5"));

	msg = "";
	for (var s=0; s<solutionNum; s++)
	{
	  for (var t=0; t<stakeholderNameNum; ++t)
		{
		  var colorSH="";
			var verChange = (t/stakeholderNameNum)*cellheight;
			if (grade[s])
			{
			  if (grade[s][t] && grade[s][t]!=0)
				{
				  var gradeAbs= Math.abs(grade[s][t]);
					msg = msg + '<DIV style="position: absolute; left:'+gradeLoc[1]+'px;top:'+(getAbsoluteTop("rowoption"+s)+verChange)+'px">';
					msg = msg + '<img src="bar-'+(grade[s][t]>0?"blue":"red")+'.gif" height="8" width="'+(gradeLoc[gradeAbs]-gradeLoc[1]+10)+'" /> <b>'+stakeholderNameArray[t]+'</b></DIV>'; //colorSH=grade[s][t];
			  }
			} 
			msg = msg + colorSH;
		}
	}
	
  document.getElementById('canvasfloat').innerHTML=msg;
}


